コードを使用してすべてのスレッドとその ID、ステータスを出力する方法はありますか?
たとえば、5 つのスレッドがあり、それらすべてを列挙したいとします。
以下のようにできます。
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
for (Thread thread: threadSet) {
System.out.println(thread.getId());
}
メソッドThread.getAllStackTraces()を使用する前に、必ず読んで理解してください。
Thread.currentThread()。getId();を使用します。
プログラムの他の部分からスレッドを制御する必要がある場合は、スレッド オブジェクトをパブリック変数に割り当てます。何が実行されているかだけを知りたい場合は、直接出力します。
public int myThreadId = 0;
public void run () {
System.out.println("Thread Name: " + Thread.currentThread().getName(); // Printing the thread name
myThreadId = Thread.currentThread().getId(); // Assigning the thread ID to a public variable
}
続きを読む: Java スレッドへの参照を取得する方法 | eHow.com http://www.ehow.com/how_6879305_reference-java-thread.html#ixzz2FfEUe3cF
また
次のように、ルート ThreadGroup へのハンドルを取得します。
ThreadGroup rootGroup = Thread.currentThread( ).getThreadGroup( );
ThreadGroup parentGroup;
while ( ( parentGroup = rootGroup.getParent() ) != null ) {
rootGroup = parentGroup;
}
次に、ルート グループで enumerate() 関数を繰り返し呼び出します。2 番目の引数を使用すると、すべてのスレッドを再帰的に取得できます。
Thread[] threads = new Thread[ rootGroup.activeCount() ];
while ( rootGroup.enumerate( threads, true ) == threads.length ) {
threads = new Thread[ threads.length * 2 ];
}
配列がすべてのエントリを含むのに十分な大きさになるまで、enumerate() を繰り返し呼び出す方法に注意してください。