この質問は、マルチスレッドのJavaプログラム内で配列内容を安全に公開することに関係しています。安全に配列要素を公開する
のは、私はオブジェクトのいくつかの任意の配列を持っていると仮定しましょう:
Object[] myArray = ...
今、この配列は、多分このように、別のスレッドに引き渡されます。
new Thread() {
public void run() {
// ...
Object o = myArray[0];
// ...
}
};
私の質問は、新しいスレッドが意志でありますそれ以上の同期が行われていない場合は、アレイ内の値を「期待値」として観察します。これは、配列自体が(最終的な/揮発性の)フィールドであるか、ローカル変数であるかによって異なりますか?最初のスレッドからの配列の後続の変更は、新しいスレッドにすぐに見えますか? 配列の要素を安全にパブリッシュする最も効率的な方法は何でしょうか?
はい、 'Thread'をyesにしていないためです。 'start'はbefore-beforeを設定します。 – Savior
このような配列を共有することは非常に悪い考えです。あなたがそれを読んでほしいという理由だけで、他の観察者が突然修飾語になるかもしれないというわけではありません。スレッド間でデータを共有するためのより良いパターンがあります – ControlAltDel
私の場合、AOPの 'MethodInvocation'(メソッド呼び出しを傍受して得たもの)を渡して別のスレッドで実行させています。それによって私は議論の配列を引き渡す。私は次に、異なる糸の中で傍受された方法で単純に「進行する」ことの意味がどんなものかと疑問に思った。 – SimonT