特定线程数
我想知道特定Thread类有多少活动线程。 假设我有一个T类扩展线程。 在其他一些类(Ex:Demo)中,我想得到T类Thread的线程数。 我知道Thread.activeCount()
方法,但它将获得一个线程组的计数。 它不能满足我的需求。 假设我有T1和T2类扩展线程,在Demo类中我想得到多少T2活动线程。 我该怎么做到这一点? 有任何想法吗??
PS:我没有类T1和T2的源代码。
谢谢您的帮助。
您可以使用Thread.enumerate()
:
public int countThreadsOfClass(Class extends Thread> clazz) { Thread[] tarray = new Thread[Thread.activeCount()]; Thread.enumerate(tarray); int count = 0; for(Thread t : tarray) { if(clazz.isInstance(t)) count++; } return count; }
您的Thread
(或Runnable
)子类可以维护static
活动计数。 run()
开始时递增, run()
结束时递减(在finally
块中)。
确保以multithreading安全方式完成递增/递减。
您可以实现ThreadFactory来构造自定义Thread类并提供ThreadGroup实例以从中获取计数。 通过使用ThreadFactory,每个实例都可以包含自己的ThreadGroup,从而可以根据使用的工厂访问计数。
尝试使用ThreadPoolExecutor
。 您可以扩展ThreadPoolExecutor
并通过调用getActiveCount()
计算线程数。
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html