私はマルチスレッドアプリケーションを持っています。 Thread.start()を使用してスレッドを手動で開始する場合、すべての同時スレッドは正確に25%のCPUを使用します(まさしく1つのコア - これはクワッドコアマシン上にあります)。したがって、2つのスレッドを実行する場合、CPU使用率は正確に50%です。Java:ExecutorServiceは手動のスレッド実行より効率が悪いですか?
ExecutorServiceを使用してスレッドを実行すると、1つの "ゴースト"スレッドがCPUリソースを消費するようです。 1つのスレッドは、25%の代わりに50%、2つのスレッドを使用する75%などを使用します。
これは、Windowsタスクマネージャのアーティファクトの一種かもしれませんか?
Excutorサービスコードが
ExecutorService executor = Executors.newFixedThreadPool(threadAmount);
for (int i = 1; i < 50; i++) {
Runnable worker = new ActualThread(i);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
System.out.println("Finished all threads");
とThread.start()のコードです:
ActualThread one= new ActualThread(2,3);
ActualThread two= new ActualThread(3,4);
...
Thread threadOne = new Thread(one);
Thread threadTtwo = new Thread(two);
...
threadOne.start();
threadTwo.start();
...
2番目の例でスレッドが終了するのを待つコードはどこですか? –