4

次のアルゴリズムを実行したい - これは Java で行う必要がある

for(int i = 0; i< 100; i++){
    create 8 threads which perform a task
    wait for all threads to finish
}

オーバーヘッド (および各スレッドの作業時間が 20 ミリ秒未満であるという事実) のために、スレッドが継続的に作成および破棄されないことが望ましいため、スレッド プール1のアイデアが生まれました。また、 Executable 2を使用すると、シャットダウンを呼び出してから awaitTermination を呼び出すことができることも知っています。ただし、ループがあるため、この場合は望ましくありません。では、スレッド同期はどのようにして発生するのでしょうか?

従来のスレッドの join() メソッドを使用して行われるように、スレッド プール内のスレッドを同期したいと考えています。

4

3 に答える 3

5

サイクリックバリアを見てみましたか。スレッドのグループが停止し、全員が共通の障壁に達するまで待機できるように最適化されています。共通のバリアを参照して、既知の数のプールされたスレッドで使用できない理由はわかりません。await()別のスレッドで実行されるため、バリアカウントに達したときに呼び出されたコールバックで同期する必要がある場合は、さらに複雑になる可能性があります。

于 2011-11-29T17:30:25.507 に答える
2

すべてのタスクをキューに入れてから、キューをにフィードする必要がありますThreadPoolExecutor。スレッドプールエグゼキュータに使用するスレッドの数を指定すると、タスクの実行が処理されます。

于 2011-11-29T18:01:02.587 に答える
0

jdk 7 の fork/join フレームワークを見てください。

于 2011-11-29T17:52:43.967 に答える