プログラムで実行されているスレッドの量を取得するソリューションを探していました。Get a List of all Threads currently running in Java のこの 2 つのソリューションに行き着きました。
使用する
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
runningThreads = threadSet.size();
最終的には75スレッドになります。
使用する
ThreadGroup rootGroup = Thread.currentThread( ).getThreadGroup( );
ThreadGroup parentGroup;
while ( ( parentGroup = rootGroup.getParent() ) != null ) {
rootGroup = parentGroup;
}
Thread[] threads = new Thread[ rootGroup.activeCount() ];
while ( rootGroup.enumerate( threads, true ) == threads.length ) {
threads = new Thread[ threads.length * 2 ];
}
runningThreads = threads.length;
スレッドの正確な2倍の量になります-> 150
なぜテアドが二重になっているのだろうと思っていたのですが、これを見ましたthreads = new Thread[ threads.length * 2 ];
。
なぜこの方法で 2 を掛けるのですか?
編集:
私の質問の形式が間違っているのかもしれません。今答えられても訂正したいです。問題は、サイズがすでに十分に大きい場合でも 2 を掛けて、現在実行中のスレッドの量を間違って取得する理由です。