0

私はマルチスレッドアプリケーションに取り組んでおり、目的のために ExecutorCompletionService を使用しています。これまでのところ、アプリケーションは正常に動作しており、問題はありません。ただし、特定のシナリオがあります。実行中の n スレッドがあり、何らかの理由で一部のスレッドが後で処理を完了すると仮定すると、その場合、プログラムがすべての処理スレッドによって生成された結果を使用することを確認する方法です。このクラスのtake()メソッドを使用しています。ただし、より良いアプローチがあるかどうかを理解しようとしています。理想的には、未完了のタスクを格納するデータ構造を照会できるソリューションを探しています。シナリオを作成することができないため (何らかの 1 回限りのテスト コーディングを行う必要があるため、時間がかかる場合があります)、フォーラムで提案を探しています。よろしく、

4

1 に答える 1

0

プログラムがすべての処理スレッドによって生成された結果を使用することを確認する方法。

ExecutorCompletionService最後のタスクを消費したとき、消費者はどのように知っているのでしょうか? 通常は、 に送信されたジョブの数をカウントし、その数のジョブExecutorServiceをデキューした後、完了サービスからの取得を停止します。

一度にすべてをキューに入れることができない多数のジョブがある場合は、カウンターとboolean doneステータス フィールドを使用できます。そのため、が true で、ジョブ カウンターが一致したExecutorCompletionServiceときに終了します。done

private class CompletedJobInfo {
    ExecutorCompletionService service;
    boolean done;
    int submittedCount;
}
于 2013-07-22T20:53:51.310 に答える