3

コードを使用してすべてのスレッドとその ID、ステータスを出力する方法はありますか?

たとえば、5 つのスレッドがあり、それらすべてを列挙したいとします。

4

3 に答える 3

2

以下のようにできます。

Set<Thread> threadSet = Thread.getAllStackTraces().keySet();

for (Thread thread: threadSet) {
 System.out.println(thread.getId());
}

メソッドThread.getAllStackTraces()を使用する前に、必ず読んで理解してください。

于 2012-12-21T06:09:43.430 に答える
1

Thread.currentThread()。getId();を使用します。

于 2012-12-21T06:05:06.033 に答える
-1

プログラムの他の部分からスレッドを制御する必要がある場合は、スレッド オブジェクトをパブリック変数に割り当てます。何が実行されているかだけを知りたい場合は、直接出力します。

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() を繰り返し呼び出す方法に注意してください。

于 2012-12-21T06:09:35.917 に答える