2
私は、コレクションXは可変オブジェクトであるCopyOnWriteArrayListは可変オブジェクトとともに使用できますか?
CopyOnWriteArrayList<X> myCOW = new CopyOnWriteArrayList<X>();
を使用しています。実際にJava Concurrency in Practiceでは、効果的に変更できないオブジェクトが適切に公開されている限り、アクセス時にそれ以上の同期は必要ないということから、スレッドセーフであることを知っています。
私はコレクションを反復処理する:やってこの方法はスレッド安全性の問題に私を公開している場合
for (X x : myCOW) {
if (conditionIsMet) {
x.modify(); // modify() is a synchronized method in class X
}
}
私の質問はありますか? Xのmodify()メソッドは同期されているので、私の推測はそうではありません。
ありがとうございました。
しかし、modify()メソッドが同期されないと、それは問題になるでしょうか? – ovdsrn
@ovdsrn:はい、 'X'クラス自体がスレッドセーフでない場合、そのクラスへの同時アクセスから醜い効果を得ることができます。それは 'CopyOnWriteArrayList'が壊れていることを意味するものではありません。 –
これはコンポーネントの潜在的な問題であり、コレクションはまだ問題ありません。スレッドセーフなコンポーネントを同期させずに記述することができます。 –