2
我使用的是集合可以將CopyOnWriteArrayList與可變對象一起使用嗎?
CopyOnWriteArrayList<X> myCOW = new CopyOnWriteArrayList<X>();
其中X是一個可變對象。我知道從Java的併發實踐中說,「寫時複製集合從線程安全中獲得了這樣的事實:只要一個有效的不可變對象被正確發佈,在訪問它時就不需要進一步的同步。」
我遍歷集合:
for (X x : myCOW) {
if (conditionIsMet) {
x.modify(); // modify() is a synchronized method in class X
}
}
我的問題是,如果這樣做的這種方式暴露我線程安全的問題?我的猜測是,因爲X的modify()方法是同步的。
謝謝。
但是,如果modify()方法不會被同步,那麼這將是一個問題,不是? – ovdsrn 2012-03-12 08:25:24
@ovdsrn:是的,如果你的''X類本身不是線程安全的,那麼你可以從併發訪問中獲得難看的效果。儘管如此,這並不意味着'CopyOnWriteArrayList'壞了。 – 2012-03-12 08:29:01
這將是一個潛在的問題,該組件,收集仍然會罰款。可以在不同步的情況下編寫一個線程安全的組件。 – 2012-03-12 08:29:34