/ /複数のスレッドを待っているときのベストプラクティス - 時間、カウントなど何か? - java、マルチスレッド

複数のスレッド(時間、カウントなど)を待っているときのベストプラクティス - java、マルチスレッド

私のアプリケーションは、実行時に、独立した作業を行う複数のスレッド(この例では7)を含みます。しかし、しばらく毎に、スレッドはデータを同期させる必要があります。

これは、すべてが参照を持つDataSynchronizerオブジェクトを呼び出すスレッドによって行われます。

このクラスのフローの私の考えは次のようになります:

public class DataSynchronizer {

public void synchronizeData(List<Data> threadData) {
// Wait for all 7 threads to call this method

// When all 7 are here, hold them here & do work using one of the threads
// or a new anonymous thread

// Release the threads & let them continue their independent work
}
}

私の質問は、同期処理を行う前に "x個のスレッドをすべて待つ"ための最良の方法は何ですか?

私は、すべてのスレッドが1、最大で2秒以内にsynchronizeDataメソッドを呼び出すことを知っています。

私もそうです、

1)最初のスレッドがメソッドを呼び出した後、2秒待って、すべてのスレッドが今も到着したと仮定しますか?または

2)アクティブなスレッドがすべて到着したことを確認してください。 (アプリケーションがメソッドを呼び出す直前にスレッドがクラッシュした場合、アプリケーションは永遠に待機する)

3)カウント+タイムアウト?

4)

回答:

回答№1は2

これは、 サイクリック・バリアー 〜のためです。スレッドがすべて到着するまで待機する場所を定義し、必要に応じて実行することができます。 Runnable 同期やその他のことを実行する。


回答№2については2

あなたはjava.util.concurrent.CyclicBarrierが必要だと思います。


回答№3の場合は1
  1. スレッドとスレッドが非常に危険なアプローチであると仮定します。
  2. 永遠を待っているのはどれくらい悪いですか?私に不便な音。
  3. あなたが何か有用なことをすることができますタイムアウトをヒットした場合?プログラムをクラッシュさせ、誤ったスレッドを再起動し、何をしているのか何かを仮定しますか?

フォローオンの質問:

  • スレッドが同期に参加しない場合はどうなりますか?
  • 同期が遅い場合はどうなりますか?
  • あなたのメソッドは、別のスレッドから1つのスレッドを伝えるべきですか、それとも7人の交換可能なワーカーですか?