如何获取Java进程中的线程数

nde*_*mir 68 java multithreading

如何查看Java进程中的线程数?

mik*_*iku 83

java.lang.Thread.activeCount()
Run Code Online (Sandbox Code Playgroud)

它将返回当前线程的线程组中活动线程的数量.

docs:http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#activeCount()

  • 这只是一个估计。 (2认同)

gus*_*afc 70

ManagementFactory.getThreadMXBean().getThreadCount()不会将自己限制为线程组Thread.activeCount().


lau*_*ura 50

用于调试java程序的有用工具,它提供了线程数和其他相关信息:

jconsole <process-id>


Mar*_*ell 25

ThreadClass 上有一个静态方法,它将返回JVM控制的活动线程数:

Thread.activeCount()

返回当前线程的线程组中活动线程的数量.

此外,如果您希望实时监视它们,外部调试器应列出所有活动线程(并允许您暂停任意数量的线程).


小智 9

通用解决方案不需要像jconsole这样的GUI(在远程终端上不起作用),ps适用于非java进程,不需要安装JVM.

ps -o nlwp <pid>


Rav*_*abu 7

我编写了一个程序来迭代所有Threads创建和打印getState()的程序Thread

import java.util.Set;

public class ThreadStatus {
    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()){
                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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

java ThreadStatus

Thread :Thread[MyThread:0,5,main]:state:TIMED_WAITING
Thread :Thread[main,5,main]:state:RUNNABLE
Thread :Thread[MyThread:1,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:4,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:2,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:3,5,main]:state:TIMED_WAITING
Thread count started by Main thread:6
Run Code Online (Sandbox Code Playgroud)

如果您删除以下条件

if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup())
Run Code Online (Sandbox Code Playgroud)

您将在输出中得到以下线程,这些线程已由系统启动.

Reference Handler, Signal Dispatcher,Attach Listener and Finalizer.


Ali*_*abi 5

使用Linux Top命令

top -H -p (process id)

您可以通过以下方法获取一个程序的进程ID:

ps aux | grep (your program name)

例如 :

ps aux | grep user.py