我有一个对象用于使用多线程方法更新数据库。Java获得线程实例的数量
现在,我不想通过压倒更新尝试来崩溃我的db连接,并且想要等待我拥有一定数量的线程。
我的课implements Runnable
叫updateUnmarked
。
现在,我只希望推出一个新的线程,如果我的线程数是< X
Thread.getAllStackTraces().keySet().size()
似乎并没有工作,还有以下似乎并没有解决这个问题:
public static int getLiveThreads(){
ThreadMXBean bean = null;
bean = ManagementFactory.getThreadMXBean();
return bean.getThreadCount();
}
两个只返回8 ...但我肯定有超过8个线程。
任何想法如何做到这一点?
谢谢!
我认为它会更容易,如果你只是使用的旗语临界区部分(DB使用),所以你创造尽可能多你需要的线程和没有信号量的线程将等待它。另外,如果您使用大量的数据库连接,可能像支持连接池的c3p0这样的数据库连接管理器可能会很有用(因此您不必持续打开和关闭连接,因为它通常是繁重的操作)。 – SJuan76 2013-02-09 19:52:25
只需使用固定大小的线程池 – artbristol 2013-02-09 20:01:14
@artbristol:好点。这里是一个很好的链接与例子http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using-executors-and-threadpoolexecutor.html – 2013-02-09 20:21:21