Как получить количество потоков в процессе Java
Как я могу увидеть количество потоков в процессе Java?
8 ответов:
полезный инструмент для отладки java-программ, он дает количество потоков и другую соответствующую информацию о них:
jconsole <process-id>
java.lang.Thread.activeCount()
он вернет количество активных потоков в группа потоков текущего потока.
docs:http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#activeCount()
ManagementFactory.getThreadMXBean().getThreadCount()
не ограничивает себя группами потоков какThread.activeCount()
делает.
существует статический метод на
Thread
класс, который возвращает количество активных потоков, управляемых JVM:
Thread.activeCount()
возвращает количество активных потоков в группе потоков текущего потока.
Я написал программу для перебора всех
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(); } } }
выход:
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
если вы удалите ниже условие
if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup())
вы также получите ниже потоков на выходе, которые были запущены системой.
Reference Handler, Signal Dispatcher,Attach Listener and Finalizer
.
универсальное решение, которое не требует графического интерфейса, такого как jconsole (не работает на удаленных терминалах), ps работает для процессов, отличных от java, не требует установки JVM.
ps -o nlwp <pid>
Использование Linux
Top
команда
top -H -p (process id)
вы можете получить идентификатор процесса одной программы с помощью этого метода:
ps aux | grep (your program name)
например :
ps aux | grep user.py
public class MainClass { public static void main(String args[]) { Thread t = Thread.currentThread(); t.setName("My Thread"); t.setPriority(1); System.out.println("current thread: " + t); int active = Thread.activeCount(); System.out.println("currently active threads: " + active); Thread all[] = new Thread[active]; Thread.enumerate(all); for (int i = 0; i < active; i++) { System.out.println(i + ": " + all[i]); } } }