copyonwriteArrayList并发容器
来源:5-8 并发容器及安全共享策略总结
![](http://img1.sycdn.imooc.com/user/5b46c18500016db519201080-100-100.jpg)
嗯嗯_不错
2018-07-09
老师,copyonwriteArrayList的读没有加锁,为什么还是线程安全的呢?
public E get(int index) {
return get(getArray(), index);
}
当一个线程copyonwriteArrayList调用add(int index, E element)时,另一个线程读的时候是原来的数组数据,不是脏读了吗?
写回答
1回答
-
你好,CopyOnWriteArrayList不适用于实时读的场景,像拷贝数组、新增元素都需要时间,所以调用一个set操作后,读取到数据可能还是旧的,虽然CopyOnWriteArrayList 能做到最终一致性,但是还是没法满足实时性要求。因此如果对实时要求特别高,那么CopyOnWriteArrayList 可能确实不太适合,他主要用于读多写少的情景,这代表实际的写理论上会非常少,而且是通过最终数据的正确来保证线程安全。
如果任何一个时间点都期望数据是正确的,那么这时候应该考虑使用同步容器,并发容器没法取代同步容器,并发容器更多的是在保证线程安全的大前提下,尽可能提升并发的性能112018-07-10
相似问题