copyonwriteArrayList并发容器

来源:5-8 并发容器及安全共享策略总结

嗯嗯_不错

2018-07-09

老师,copyonwriteArrayList的读没有加锁,为什么还是线程安全的呢?

public E get(int index) {
   return get(getArray(), index);
}

当一个线程copyonwriteArrayList调用add(int index, E element)时,另一个线程读的时候是原来的数组数据,不是脏读了吗?



写回答

1回答

Jimin

2018-07-10

你好,CopyOnWriteArrayList不适用于实时读的场景,像拷贝数组、新增元素都需要时间,所以调用一个set操作后,读取到数据可能还是旧的,虽然CopyOnWriteArrayList 能做到最终一致性,但是还是没法满足实时性要求。因此如果对实时要求特别高,那么CopyOnWriteArrayList 可能确实不太适合,他主要用于读多写少的情景,这代表实际的写理论上会非常少,而且是通过最终数据的正确来保证线程安全。
如果任何一个时间点都期望数据是正确的,那么这时候应该考虑使用同步容器,并发容器没法取代同步容器,并发容器更多的是在保证线程安全的大前提下,尽可能提升并发的性能

1
1
嗯嗯_不错
老师一说有豁然开朗的感觉,谢谢老师。
2018-07-10
共1条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程