为什么在CopyOnWriteArrayList中只能进行一次写操作?

问题描述

copyOnWriteArrayList做得很好。我可以同时从多个线程读取,但可以从1个线程更新。它的工作方式是write使用数组的单独副本,更新信息并将其设置回原始数组。

问题是:由于写操作使用单独的副本,因此如何不能并行执行呢?由于它们现在以不同的阵列工作,因此不会有任何干扰。因此,无论谁写1st,它都会将这些新更新设置为原始数组。那么,为什么Java只允许一次写入?

在这里缺少什么了,为什么只有1个线程可以写吗?

解决方法

如果两个线程同时将一个元素添加到CopyOnWriteArrayList,则我们希望这两个元素之后都将出现在列表中。由于竞争条件而丢失的元素并不是CopyOnWriteArrayList的设计者和用户想要的。

展开:如果您有两个线程,并且它们执行以下操作:

线程1:list.add("A");

线程2:list.add("B");

预期的最终结果是,list包含A和B,即使不一定按此顺序。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...