Java 为什么CopyOnWriteArrayList中只能有一个write?

Java 为什么CopyOnWriteArrayList中只能有一个write?,java,copyonwritearraylist,Java,Copyonwritearraylist,CopyOnWriteArrayList做得很好。我可以同时读取多个线程,但我可以从一个线程更新。其工作方式是write使用数组的单独副本,更新信息并将其设置回原始数组 问题是:既然写操作使用单独的拷贝,它们怎么不能并行地执行呢?因为它们现在在不同的阵列中工作,所以不会有任何干扰。因此,无论谁先写入,它都会将这些新更新设置为原始数组。那么为什么Java只允许一次写入呢 我在这里遗漏了什么吗?为什么只有一个线程可以写入?如果两个线程同时向CopyOnWriteArrayList添加一个元素,那么我

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

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


我在这里遗漏了什么吗?为什么只有一个线程可以写入?

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

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

线程1:
list.add(“A”)

线程2:
list.add(“B”)


预期的最终结果是
列表
同时包含A和B,即使不一定按该顺序。

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

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

线程1:
list.add(“A”)

线程2:
list.add(“B”)

预期的最终结果是
列表
同时包含A和B,即使不一定按该顺序