このディスカッション から、 Thread#activeCount() が何を返すかについて2つの意見があります。
run()
メソッドにあります。つまり、非アクティブなスレッドがrun()
メソッドを開始していないか、そのメソッドを終了しています。実際の意味は何ですか?
(StackOverflowがそのような説明の質問を嫌うので、私はソフトウェア工学に尋ねます。)
このメソッドのJavaDocから:
現在のスレッドのスレッドグループとそのサブグループ内のアクティブなスレッドの推定数を返します。現在のスレッドのスレッドグループ内のすべてのサブグループを再帰的に反復します。
このメソッドが内部データ構造をトラバースする間、スレッドの数は動的に変化し、特定のシステムスレッドの存在によって影響を受ける可能性があるため、返される値は推定値にすぎません。このメソッドは、主にデバッグと監視を目的としています。
これについてThreadGroupのコードを見ると、これはadd(Thread)
メソッドが呼び出された(作成された)ときに増分され、次のときに減分されたThreadGroupのnthreads
変数の値に基づいていることがわかりますremove(Thread)
メソッドが呼び出されます。
add
メソッドは、スレッドが作成されるときに呼び出されます。 remove
メソッドは、スレッドが終了したとき、またはスレッドの開始に失敗したときに呼び出されます。つまり、まだ開始されていないスレッドはカウントされますが、その後起動時に失敗した場合は、カウントされなくなります。