问题描述
copyOnWriteArrayList做得很好。我可以同时从多个线程读取,但可以从1个线程更新。它的工作方式是write使用数组的单独副本,更新信息并将其设置回原始数组。
问题是:由于写操作使用单独的副本,因此如何不能并行执行呢?由于它们现在以不同的阵列工作,因此不会有任何干扰。因此,无论谁写1st,它都会将这些新更新设置为原始数组。那么,为什么Java只允许一次写入?
我在这里缺少什么了,为什么只有1个线程可以写吗?
解决方法
如果两个线程同时将一个元素添加到CopyOnWriteArrayList,则我们希望这两个元素之后都将出现在列表中。由于竞争条件而丢失的元素并不是CopyOnWriteArrayList的设计者和用户想要的。
展开:如果您有两个线程,并且它们执行以下操作:
线程1:list.add("A");
线程2:list.add("B");
预期的最终结果是,list
包含A和B,即使不一定按此顺序。