Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CopyOnWriteArrayList能否用于可变对象?_Java_Multithreading_Collections_Thread Safety - Fatal编程技术网

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
    }
   }