特定线程数

我想知道特定Thread类有多少活动线程。 假设我有一个T类扩展线程。 在其他一些类(Ex:Demo)中,我想得到T类Thread的线程数。 我知道Thread.activeCount()方法,但它将获得一个线程组的计数。 它不能满足我的需求。 假设我有T1和T2类扩展线程,在Demo类中我想得到多少T2活动线程。 我该怎么做到这一点? 有任何想法吗??

PS:我没有类T1和T2的源代码。

谢谢您的帮助。

您可以使用Thread.enumerate()

 public int countThreadsOfClass(Class 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