「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 先物のリストを効率的に待ち、例外を処理する方法は?

先物のリストを効率的に待ち、例外を処理する方法は?

2024 年 11 月 2 日に公開
ブラウズ:884

How to Efficiently Wait for a List of Futures and Handle Exceptions?

先物リストでの効率的な待機

先物リストを扱うときの目標は、完了するか、先物リストが発生するまで待つことです。将来的には例外です。 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