采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,copyonwriteArrayList的读没有加锁,为什么还是线程安全的呢?
public E get(int index) { return get(getArray(), index);}
当一个线程copyonwriteArrayList调用add(int index, E element)时,另一个线程读的时候是原来的数组数据,不是脏读了吗?
你好,CopyOnWriteArrayList不适用于实时读的场景,像拷贝数组、新增元素都需要时间,所以调用一个set操作后,读取到数据可能还是旧的,虽然CopyOnWriteArrayList 能做到最终一致性,但是还是没法满足实时性要求。因此如果对实时要求特别高,那么CopyOnWriteArrayList 可能确实不太适合,他主要用于读多写少的情景,这代表实际的写理论上会非常少,而且是通过最终数据的正确来保证线程安全。如果任何一个时间点都期望数据是正确的,那么这时候应该考虑使用同步容器,并发容器没法取代同步容器,并发容器更多的是在保证线程安全的大前提下,尽可能提升并发的性能
老师一说有豁然开朗的感觉,谢谢老师。
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.2k 15
3.6k 12
1.2k 12