何千ものレコードを db から に取得しましArrayList
た。そして、この記録に基づいてレポートを作成する必要があります。
マルチスレッドを適用して Java でこの機能を実現するにはどうすればよいですか。
何千ものレコードを db から に取得しましArrayList
た。そして、この記録に基づいてレポートを作成する必要があります。
マルチスレッドを適用して Java でこの機能を実現するにはどうすればよいですか。
あなたがしようとしていることの詳細を知らなくても、Executor のチュートリアルを紹介します。
Executor フレームワークを使用すると、作業をジョブ (Callable) に分割することができ、Executor はこれらのジョブを並行して実行します (プーリングなどを使用)。notify()
/ wait()
/join()
などの複雑さを処理することなく、ジョブをクエリ/待機するだけで完了します。
API は、プーリング/スレッド作成の懸念に加えて、スケジューリングとジョブの完了時期の決定 (および/または例外処理) を抽象化します。
詳細を提供する必要がありますが、一般的にはProducer-Consumerパターンが機能するはずです。次のような簡単なもので試してくださいExecutorService
:
final List<Record> records = //...
final ExecutorService executorService = Executors.newFixedThreadPool(10);
for (final Record record : records) {
executorService.submit(new Runnable() {
@Override
public void run() {
//process record here
}
});
}
このコードは各レコードを取得し、最大 10 のスレッドで並行して処理します。もちろん、それで何をしたいかは、要件によって異なります。たとえばCallable<T>
、結果を返すExecutorCompletionService
、最初の結果を待つなどに使用します。