CopyOnWriteArrayList是怎么实现写有锁,读无锁,读写之间不堵塞的?(加强版读写分离源码剖析)

所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂!

GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual

搜索关注微信公众号“码出Offer”,送你学习福利资源!

CopyOnWriteArrayList是ArrayList的线程安全版本,从名字推测,CopyOnWriteArrayList是在有写操作的时候会copy一份数据,然后写完再设置成新的数据。CopyOnWriteArrayList适用于读多写少的并发场景。而CopyOnWriteArraySet也是线程安全的Set版本,也是CopyOnWriteArrayList来代理读写分离的,而且还保留了Set的特性(无序、无下标)。那么我就去介绍他们的其中一个CopyOnWriteArrayList!


CopyOnWriteArrayList思想

我们考虑这么一个问题,比如我在写一篇博客或者是修改一篇博客,其实我正在修改只是没有点击保存重新发布而已,所以你们看到的就是我没有修改之前的那一篇(旧数组)。只要这时我写完了修改完了,点击保存(替换地址),而这时你们看的就是我新修改完后的博客(替换地址后的新数组)了!

因为无计其数的读者正在读同一篇博客,他们之间肯定是不可以阻塞的!假如阻塞的话,就面临排队读博客了(举个例子,不是现实)!而且我们还得保证博主在修改博客的时候,读者还能读到博客内容,这时候就需要读写分离了(读与写同时并发,互不影响)!即原生操作实现写有锁,读无锁,读写之间不堵塞的效果!


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值