我正在寻找一种方法来查看当前正在运行的线程的数量
答案 0 :(得分:27)
这将为您提供VM中的线程总数:
int nbThreads = Thread.getAllStackTraces().keySet().size();
现在,如果您希望当前正在执行的所有线程,您可以这样做:
int nbRunning = 0;
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t.getState()==Thread.State.RUNNABLE) nbRunning++;
}
这里列举了可能的状态:Thread.State javadoc
如果你想看到运行的线程不是programmaticaly而是使用Windows工具,你可以使用Process Explorer。
答案 1 :(得分:5)
答案 2 :(得分:1)
回复您的以下评论
在下面的代码中:while(resultSet.next()){ 名称= resultSet.getString( “hName”); MyRunnable worker = new MyRunnable(hName); threadExecutor.execute(worker); }。我的主题 池的大小为10.我需要确保我的程序正常运行 正确使用多线程&想检查有多少线程 在某个时刻跑步。我怎么能这样做?
另一个答案,我建议您使用JVisualVM对代码进行分析,并检查您的线程池是否正常工作。这个建议背后的原因是,您不必为JVM管理的所有其他内务线程而烦恼。除了你想要做的是为什么像JVisualVM这样的工具。
如果您不熟悉Java程序,可以通过JVisualVM查看运行代码时发生的问题。您可以看到堆,GC活动,检查运行/等待任何样本/配置文件的线程您的CPU或内存使用情况。还有很多插件。
答案 3 :(得分:0)
来自Windows:
这个过程肯定会有一个performance counter可以告诉你。
编程:
返回当前线程的线程组及其子组中活动线程数的估计值。递归迭代当前线程的线程组中的所有子组。
或更直接地,ThreadGroup#activeCount
:
返回此线程组及其子组中活动线程数的估计值。
返回此线程组的父级。
首先,如果父级不为null,则调用父线程组的checkAccess方法,不带参数;这可能会导致安全例外。
所有这些似乎都表明了以下几点:
int activeThreadTotalEstimate() {
ThreadGroup group;
ThreadGroup parent;
group = Thread.currentThread().getThreadGroup();
while ((parent = group.getParent()) != null) {
group = parent;
}
return group.activeCount();
}
答案 4 :(得分:0)
代码段:
import java.util.Set;
import java.lang.Thread.State;
public class ActiveThreads {
public static void main(String args[]) throws Exception{
for ( int i=0; i< 5; i++){
Thread t = new Thread(new MyThread());
t.setName("MyThread:"+i);
t.start();
}
int threadCount = 0;
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
for ( Thread t : threadSet){
if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup() &&
t.getState() == Thread.State.RUNNABLE){
System.out.println("Thread :"+t+":"+"state:"+t.getState());
++threadCount;
}
}
System.out.println("Thread count started by Main thread:"+threadCount);
}
}
class MyThread implements Runnable{
public void run(){
try{
Thread.sleep(2000);
}catch(Exception err){
err.printStackTrace();
}
}
}
输出:
Thread :Thread[main,5,main]:state:RUNNABLE
Thread count started by Main thread:1
说明:
Thread.getAllStackTraces().keySet()
为您提供了Program and System
启动的所有主题列表。如果没有ThreadeGroup
条件,如果它们处于活动状态,您将获得系统线程计数。
Reference Handler, Signal Dispatcher,Attach Listener and Finalizer