欢迎来看我的网络日志,交流请加我好友: 919201148。欢迎关注公众号或视频号:蜗牛互联网
Solo  当前访客:4 开始使用

蜗牛学编程

程序员 | 互联网 | 科技 | Java | 架构 | 职场进阶 | 财富进阶

并发包之 CopyOnWriteArrayList

2016-07-29 00:22:08 huayonglun
0  评论    214  浏览

CopyOnWriteArrayList

实现

  线程安全, 读时无锁。

CopyOnWriteArrayList()

  大小为 0 的数组

add(E)

  无 synchronized 关键字

  用 ReentrantLock

  新数组 newlen = len + 1

  新对象放结尾

  引用切换

remove(E)

  ReentrantLock 保证线程安全

  新数组 newLen = len - 1

  遍历 newLen 长度

  • 若找到 equal ,后边元素前移,,引用切换,返回true
  • 未找到,单个赋值给新数组

  特殊处理最后一个元素

  • 是否 equal ,是,删,引用切换,返回true
  • 否,返回 false

  与 ArrayList 相比,锁不同,复制没有调用 System.arrayCopy ,性能有下降

get(int)

  直接获取, 无锁保护

  可能 脏数据 ,性能高

  适合写少读多且脏数据影响不大

iterator()

  创建 CowIterator ,并保存当前数据的快照,不抛异常

总结

  • CopyOnWriteArrayList 基于 ReentrantLock
  • 保证增加、删除互斥
  • 读不上锁, 保证读的性能
  • 副作用:脏数据

---
欢迎关注微信公众号,技术,思维,心理,带给你认知的全方位成长。

你的关注,就是对我最大的肯定,我会努力产出的,我们一起成长~

本文由 永伦的小屋 原创。
转载请注明作者及出处,本文作者为 永伦的小屋。


标题:并发包之 CopyOnWriteArrayList
作者:huayonglun
地址:http://huayonglun.com/articles/2016/07/29/1558761214389.html
文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接。
转载请注明:文章转载自 huayonglun.com

本网站内容完全免费,但网站运营每月都需要付出时间和金钱。分享、转发、订阅是对我最大的肯定和支持。
如果能打赏一杯咖啡,那我就太开心了~加我微信(919201148)交个朋友我也很开心~


qrcode_for_gh_d5ac6a234eaf_258.jpg

, , ,



微信搜一搜「蜗牛互联网」
→「技术干货」每周推送
→「免费资料」随时领取
→「优质社群」随时加入
qrcode_for_gh_d5ac6a234eaf_258.jpg

点击或扫码添加蜗牛微信,加入技术交流群 qrcode_for_gh_d5ac6a234eaf_258.jpg

目录

TOP