2012-03-12 57 views
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()方法是同步的。

谢谢。

回答

3

如果您有一个线程安全的类和集合,它们可以以线程安全的方式一起使用。可能有些问题,但我没有看到你的例子。

+0

但是,如果modify()方法不会被同步,那么这将是一个问题,不是? – ovdsrn 2012-03-12 08:25:24

+0

@ovdsrn:是的,如果你的''X类本身不是线程安全的,那么你可以从并发访问中获得难看的效果。尽管如此,这并不意味着'CopyOnWriteArrayList'坏了。 – 2012-03-12 08:29:01

+0

这将是一个潜在的问题,该组件,收集仍然会罚款。可以在不同步的情况下编写一个线程安全的组件。 – 2012-03-12 08:29:34

相关问题