先物リストでの効率的な待機
先物リストを扱うときの目標は、完了するか、先物リストが発生するまで待つことです。将来的には例外です。 f.get() への個別の呼び出しを伴う単純なアプローチでは、早期に例外が発生した場合に不必要な待機が発生する可能性があります。
CompletionService による不必要な待機の回避
これに対処するにはこの問題では、CompletionService クラスが登場します。これにより、非同期タスクを実行し、その結果が使用可能になったときにスレッドセーフな方法で取得できるようになります。使用方法は次のとおりです。
Executor executor = Executors.newFixedThreadPool(4);
CompletionService completionService = new ExecutorCompletionService(executor);
// Submit tasks to the service
for (int i = 0; i () {
@Override
public SomeResult call() {
// Task logic here
return result;
}
});
}
int received = 0;
boolean errors = false;
// Loop until all tasks are complete or an error occurs
while (received resultFuture = completionService.take(); // Blocks if nothing available
try {
SomeResult result = resultFuture.get();
received ;
// Process result here
} catch (Exception e) {
// Log error
errors = true;
}
}
// Consider canceling remaining tasks if an error occurred
CompletionService アプローチを使用すると、タスクの完了をリアルタイムで監視し、エラーが発生した場合はそれ以上の処理を停止できるため、不必要な待機を回避できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3