Java CopyOnWriteArrayList能否用于可变对象?
我正在使用一个集合Java CopyOnWriteArrayList能否用于可变对象?,java,multithreading,collections,thread-safety,Java,Multithreading,Collections,Thread Safety,我正在使用一个集合 CopyOnWriteArrayList<X> myCOW = new CopyOnWriteArrayList<X>(); 我的问题是,这样做是否会使我面临线程安全问题?我猜不是,因为X的modify()方法是同步的 谢谢。如果您有线程安全的类和集合,那么它们可以以线程安全的方式一起使用。可能会有问题,但在您的示例中我看不到任何问题。但是如果modify()方法不同步,那么这将是一个问题,不是吗?@ovdsrn:是的,如果您的X类本身不是
CopyOnWriteArrayList<X> myCOW = new CopyOnWriteArrayList<X>();
我的问题是,这样做是否会使我面临线程安全问题?我猜不是,因为X的modify()方法是同步的
谢谢。如果您有线程安全的类和集合,那么它们可以以线程安全的方式一起使用。可能会有问题,但在您的示例中我看不到任何问题。但是如果modify()方法不同步,那么这将是一个问题,不是吗?@ovdsrn:是的,如果您的
X
类本身不是线程安全的,那么并发访问它可能会产生不好的效果。但这并不意味着CopyOnWriteArrayList已损坏。这可能是组件的一个潜在问题,集合仍然可以。在没有同步的情况下编写线程安全组件是可能的。我想这就是CopyOnWriteArrayList
所做的。
for (X x : myCOW) {
if (conditionIsMet) {
x.modify(); // modify() is a synchronized method in class X
}
}