CopyOnWriteArrayList并发问题

来源:17-1 课程总结

旭丶

2019-05-04

老师,关于并发容器有个问题,这里以CopyOnWriteArrayList为例:
关于同步容器Vector,它本身每个方法是加了对象锁的,所以在同时操作单个方法时不存在任何问题,但是在一个线程循环遍历时,有其他线程对其进行了删改操作,就会引发不安全的问题,所以引入了并发容器CopyOnWriteArrayList,但是CopyOnWriteArrayList经测试好像也有这个问题
图片描述

写回答

2回答

Jimin

2019-05-04

你好,你这个例子和课程里的例子其实是一样的,本质上是都对list做了一次remove操作后,然后又去访问remove之前最后一个元素。
这种问题的本质原因是:尽管容器每个操作是线程安全的,但容器保证不了多个操作时间的线程安全性,原因是同一个线程间的连续操作是不具备原子性的。只有保证了多个操作间的原子性,才能保证这时的线程安全性。

1
5
Jimin
回复
旭丶
没有特殊的场景,主要就是用在并发读远大于并发写的场景里
2019-05-05
共5条回复

旭丶

提问者

2019-05-04

测试图

//img.mukewang.com/szimg/5ccd08fb00011ee314421550.jpg

//img.mukewang.com/szimg/5ccd08fe00013adf20640868.jpg


0
0

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

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

3923 学习 · 832 问题

查看课程