私はJavaでExecutorServiceを使用して複数のスレッドを実行するアプリケーションを作成しています。ExecutorServiceで完了したタスクを追跡する
複数のタスク(一度に何千も)をCallableとしてExecutorに提出したい場合は、その結果を取得します。私がこれに近づく方法は、submit()関数を呼び出すたびに、私はArrayListに格納するFutureを取得します。後で、タスクを完了したかどうかを調べるために、future.get()関数をタイムアウトで呼び出すことで、リストを繰り返し処理するスレッドにListを渡します。これは適切なアプローチですか、あまりにも非効率ですか?
EDIT ---詳細--- 別の問題は、各Callableが異なる処理時間を要することです。したがって、リストから最初の要素を取り出し、その上でget()を呼び出すと、ブロックされ、他の要素の結果が利用可能になり、プログラムは認識しません。そのため、私はタイムアウトを繰り返す必要があります。事前に
おかげ
を参照してください。私はあなたがグアバライブラリにListenableFutureユーティリティを検討することをお勧めします。https://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained – Enwired