22

で固定サイズのスレッドプールを作成しExecutors.newFixedThreadPool(2)、10個Runnableのオブジェクトを実行しました。ブレークポイントを設定し、実行をトレースしました。ただし、fixedSizeThreadPool.awaitTermination()すべてのタスクが完了しても続行できません。

基本的に:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);
for (int i = 0; i < 10; ++i) {
    fixedSizeThreadPool.execute(myRunables[i]);
}
try {
    fixedSizeThreadPool.awaitTermination(timeout, timeoutUnits);
} catch (Exception e) { }
System.out.println("done!");

しかし、これは常に行き詰まりawaitTerminationます。どうしたの?

4

2 に答える 2

32

ピーターが指摘したように、shutdown()最初に呼び出される必要があります。

ソース:javadoc

于 2011-08-14T19:28:51.760 に答える
2

ExecutorService#invokeAllを使用することもできます。すべてのタスクが完了するか、タイムアウトに達するまでブロックします。shutdownExecutorServiceに他のタスクと特にスケジュールされたタスクが含まれている場合は、を使用するよりも少しクリーンです。これらは、への呼び出しの影響も受けますshutdown

于 2011-08-14T19:41:03.453 に答える