0

何千ものレコードを db から に取得しましArrayListた。そして、この記録に基づいてレポートを作成する必要があります。

マルチスレッドを適用して Java でこの機能を実現するにはどうすればよいですか。

4

2 に答える 2

3

あなたがしようとしていることの詳細を知らなくても、Executor のチュートリアルを紹介します。

Executor フレームワークを使用すると、作業をジョブ (Callable) に分割することができ、Executor はこれらのジョブを並行して実行します (プーリングなどを使用)。notify()/ wait()/join()などの複雑さを処理することなく、ジョブをクエリ/待機するだけで完了します。

API は、プーリング/スレッド作成の懸念に加えて、スケジューリングとジョブの完了時期の決定 (および/または例外処理) を抽象化します。

于 2012-09-28T11:45:20.847 に答える
2

詳細を提供する必要がありますが、一般的には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、最初の結果を待つなどに使用します。

于 2012-09-28T11:47:31.753 に答える