Javaで、以下のようなループで1000スレッドを起動した場合、実際に実行中のスレッド数とスレッドが消費するCPUリソースをタスクマネージャで監視する方法はありますか?
for(int j=0; j<=1000; j++)
{
MyThread mt = new MyThread ();
mt.start ();
}
Javaで、以下のようなループで1000スレッドを起動した場合、実際に実行中のスレッド数とスレッドが消費するCPUリソースをタスクマネージャで監視する方法はありますか?
for(int j=0; j<=1000; j++)
{
MyThread mt = new MyThread ();
mt.start ();
}
VisualVM
またはJConsole
またはその他の監視ツールを使用できます
Windows タスク マネージャーを意味する場合は、[プロセス] タブに表示される列をカスタマイズできます。
Menu View > Select Columns > Threads
編集
簡単なテストでは、追加のスレッドを作成するとそのカウンターが 1 つ増加し、そのスレッドが終了するとカウンターが減少することがわかります。
ただし、おそらくさまざまな JVM スレッドも含まれているため、複数のスレッドで開始されます (19 のスレッドで開始されます)。jconsole は、モノスレッド プログラムでも 10 個のスレッドを表示することに注意してください。
ビジュアル VM を使用すると、デーモン スレッドと非デーモン スレッド (すべての JVM スレッドはデーモン) の間の分割を確認できます。
テストコード:
public static void main(String[] args) throws InterruptedException {
Thread.sleep(3000);
Runnable r = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException ex) {}
}
};
for (int i = 0; i < 5; i++) {
new Thread(r).start();
Thread.sleep(1000);
}
Thread.sleep(10000);
}
コードでは、Thread.activeCount()メソッドを使用できます
VisualVMはこの目的のためのより良いツールだと思います。すべてのプラグインをダウンロードしてインストールすると、スレッドとより多くの情報が得られます。
この perpers (MXBean) には Managed Bean を使用できます。たとえば、ThreadMXBean です。
MXBean を取得するには、単に呼び出します
ManagementFactory.getThreadMXBean()
メソッド getThreadCount() および getCurrentThreadCpuTime() が役に立ちます。