タスクのパイプラインがあり (パイプライン内の各タスクには異なる並列処理要件があります)、各タスクは異なる ExecutorService で動作します。タスクはデータのパケットで動作するため、10 個のデータ パケットがある場合、10 個のタスクが に送信されservice1、データ パケットごとに 1 つのタスクが送信されます。にサブミットされたタスクservice1が実際に呼び出されると、新しいタスクをサブミットしてデータパケットをさらに処理することがservice2できservice3ます。
次のコードは正常に動作します。
shutdown()service1すべてが送信された後に呼び出されますservice1その後、shutdown() の前に送信されたすべてのタスクが実際に実行を完了するまで、awaitTermination() は返されません。--その後、 onが
shutdown()呼び出されますが、送信されたすべてのタスクが完了し、すべてのタスクが送信されているためです。-- などservice2service1service2service1service2shutdown()service2service3ExecutorService[] services = { service1, service2, service3}; int count = 0; for(ExecutorService service: services) { service.shutdown(); service.awaitTermination(1, TimeUnit.HOURS); }
ただしservice2、データパケットを小さなパケットに分割して追加のタスクを送信できるケースを追加したservice2ところ、コードが失敗しています。問題は、すべてのタスクが完了するshutdown()と呼び出されることですが、実行中のタスクから追加のタスクを送信する必要があります。service2service1service2service2
私の質問:
- 送信されたすべてのタスクの実行が終了した後に再実行しますか
shutdown()、それともすぐに戻りますが、既に送信されたタスクの実行を停止しませんか? 更新:以下に回答 - 新しい問題を解決するにはどうすればよいですか?