1

ExecutorService で実行している n 個のRunnableタスク (Callable ではない) があります。

すべてのタスクが完了するまで待ちたいと思います。

invokeAllCallables のコレクションで機能するため、使用できません。

shutdown()+awaitTerminationawaittermination にはタイムアウトを提供する必要があるため、使用できませんが、タスクが完了するまでに数時間かかることがあります。

使うことができます:

ExecutorService.shutdown();             
while (!ExecutorService.isTerminated()) {}

ただし、このループは常にトリガーされます。

そのようなシナリオでは何が提案されていますか?

4

3 に答える 3

4

ExecutorService.awaitTermination()booleanエグゼキュータが終了したか、タイムアウトが経過したかを示す を返します。もちろん、ループで呼び出すことができます:

ExecutorService executor = ...;

executor.shutdown();
while (!executor.awaitTermination(24L, TimeUnit.HOURS)) {
    System.out.println("Still waiting for the executor to finish");
}

System.out.println("Executor finished");
于 2013-05-02T07:14:39.043 に答える
2

使用できますExecutorService.awaitTermination(Long.MAX_VALUE, TimeUnit.HOURS);

于 2013-05-02T06:30:27.690 に答える