Как получить количество потоков в процессе 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()каждогоThreadimport 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]); } } }