Comment obtenir le nombre de threads dans un processus Java

Comment puis-je voir le nombre de threads dans un processus Java?

Outil utile pour le débogage des programmes Java, il donne le nombre de threads et d’autres informations pertinentes sur eux:

jconsole

 java.lang.Thread.activeCount() 

Il retournera le nombre de threads actifs dans le groupe de threads du thread en cours .

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

ManagementFactory.getThreadMXBean().getThreadCount() ne se limite pas aux groupes de threads comme le fait Thread.activeCount() .

Il existe une méthode statique sur la classe de Thread qui renvoie le nombre de threads actifs contrôlés par la machine virtuelle Java:

Thread.activeCount()

Renvoie le nombre de threads actifs dans le groupe de threads du thread en cours.

De plus, les débogueurs externes doivent répertorier tous les threads actifs (et vous permettre de les suspendre) si vous souhaitez les surveiller en temps réel.

J’ai écrit un programme pour itérer tous les Threads créés et imprimer getState() de chaque Thread

 import java.util.Set; public class ThreadStatus { public static void main(Ssortingng 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 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(); } } } 

Sortie:

 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 

Si vous supprimez la condition ci-dessous

 if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup()) 

Vous aurez également sous les threads en sortie, qui ont été démarrés par le système.

Reference Handler, Signal Dispatcher,Attach Listener and Finalizer .

Une solution générique ne nécessitant pas d’interface graphique telle que jconsole (ne fonctionne pas sur les terminaux distants), ps fonctionne pour les processus non Java, ne nécessite pas l’installation d’une JVM.

ps -o nlwp

Utilisation de la commande Linux Top

top -H -p (process id)

Vous pouvez obtenir l’identifiant de processus d’un programme par cette méthode:

ps aux | grep (your program name)

par exemple :

ps aux | grep user.py

  public class MainClass { public static void main(Ssortingng 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]); } } }