特定线程数

时间:2015-09-01 07:55:45

标签: java multithreading thread-safety

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

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

感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

您可以使用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;
}

答案 1 :(得分:0)

您的put(或Thread)子类可以保持Runnable个有效计数。 static开始时递增,run()结束时递减(在run()块中)。

确保增量/减量以多线程安全方式完成。

答案 2 :(得分:0)

您可以实现ThreadFactory来构造自定义Thread类并提供一个ThreadGroup实例来获取计数。通过使用ThreadFactory,每个实例都可以包含自己的ThreadGroup,根据所使用的工厂进行计数。

答案 3 :(得分:0)

尝试使用ThreadPoolExecutor。 您可以扩展ThreadPoolExecutor并通过调用getActiveCount()来计算线程数。

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

答案 4 :(得分:0)

   private static int getThreadCount(){
        int runningThread = 0;
        for (Thread t : Thread.getAllStackTraces().keySet()) if (t.getState()==Thread.State.RUNNABLE && t instanceof YourThreadClassName ) runningThread++;
        System.out.println("Active threads : "+runningThread);
        return runningThread;
    }

YourThreadClassName 替换为由Thread扩展的类。