Wie kann ich die Anzahl der Threads in einem Java-Prozess sehen?
top -H -p `pgrep -u <userid here> <program name>
`
Wie kann ich die Anzahl der Threads in einem Java-Prozess sehen?
Ich habe ein Programm zur Iteration aller Threads
erstellt und gedruckt getState()
eines jeden 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();
}
}
}
Ausgabe:
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
Wenn Sie folgende Bedingung entfernen
if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup())
Sie erhalten in der Ausgabe auch die folgenden Threads, die vom System gestartet wurden.
Reference Handler, Signal Dispatcher,Attach Listener and Finalizer
.
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]);
}
}
}
Ein anderer Weg: Ermitteln Sie den Prozessnamen mit dem Befehl jps und verwenden Sie diesen in dem unten stehenden Skriptausschnitt:
# Get the process id
processPid=$(jps -l | grep "Process Name" | awk '{print $1}');
# Use process id to get number of threads using ps command
ps -M $processPid| wc -l
Getestet unter macOS.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.