Java スレッドに問題があります。定義されたステップ数で 2 つのスレッドを別々に実行し、それらを通信させる必要があります。スレッド 1 は、スレッド 2 が所有および変更する ArrayList を読み取る必要があり、スレッド 2 についても同様です。それらを同期するためのより良い方法はどれですか? スレッド 2 にスレッド 1 の arrayList を使用できますか、それとも別の共有領域を定義する必要がありますか?
みんなありがとう。
Java スレッドに問題があります。定義されたステップ数で 2 つのスレッドを別々に実行し、それらを通信させる必要があります。スレッド 1 は、スレッド 2 が所有および変更する ArrayList を読み取る必要があり、スレッド 2 についても同様です。それらを同期するためのより良い方法はどれですか? スレッド 2 にスレッド 1 の arrayList を使用できますか、それとも別の共有領域を定義する必要がありますか?
みんなありがとう。
の1 つをロックするよりも、専用のシンクロナイザーを使用する方がはるかにクリーンArrayList
です。
を使用することをお勧めしCyclicBarrier
ます。JavaDoc を引用するには:
一連のスレッドが互いに共通のバリア ポイントに到達するのをすべて待機できるようにする同期支援。CyclicBarriers は、相互に時折待機する必要がある固定サイズのスレッドのパーティを含むプログラムで役立ちます。バリアは、待機中のスレッドが解放された後に再利用できるため、サイクリックと呼ばれます。
状況は対称的であるため、ある ArrayList を他のものより優先して選択しないでください。追加オブジェクトを使用します。Exchangerが最良の選択のようです。