03 CopyOnWriteArrayList

是一个线程安全的List的实现,通过写时复制机制,在每次修改操作时,复制原数组内容,来保证线程安全

CopyOnWriteArrayList是如何保证线程安全的?

对于读操作,不加锁,读操作操作的是elements数组,这个数组内部是稳定的,不会被修改,所有修改操作,都是复制一份新的数组,在新的数组上进行修改,所以读操作是线程安全的

使用volatile关键字修饰变量(volatile后续细说),使该变量所有线程可见,即修改会立即看到,写入时,会复制一份原数组,在新数组之上修改,这样不会影响到原数组,同时使用volatile关键字修饰elements数组,使写操作对elements数组引用的修改,所有线程可见

对于写操作,加互斥锁,来保证线程安全,这里写不会阻塞读操作,因为读的是原本的element数组,只会阻塞其他线程的写操作

适合读多写少的场景,因为读没有锁,而写需要加锁并且,需要复制一份element数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值