读CopyOnWriteArrayList有感
除了加锁外,其实还有一种方式可以防止并发修改异常,这就是将读写分离技术(不是数据库上的)。
先回顾一下一个常识:
1、JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个对象,一个线程获取这个引用指向的对象,那么他们之间不会发生ConcurrentModificationException,他们是在虚拟机层面阻塞的,而且速度非常快,几乎不需要CPU时间。
2、JAVA中两个不同的引用指向同一个对象,当第一个引用指向另外一个对象时,第二个引用还将保持原来的对象。
基于上面这个常识,我们再来探讨下面这个问题:
在CopyOnWriteArrayList里处理写操作(包括add、remove、set等)是先将原始的数据通过JDK1.6的Arrays.copyof()来生成一份新的数组
然后在新的数据对象上进行写,写完后再将原来的引用指向到当前这个数据对象(这里应用了常识1),这样保证了每次写都是在新的对象上(因为要保证写的一致性,这里要对各种写操作要加一把锁,JDK1.6在这里用了重入锁),
然后读的时候就是在引用的当前对象上进行读(包括get,iterator等),不存在加锁和阻塞,针对iterator使用了一个叫COWIterator的阉割版迭代器,因为不支持写操作,当获取CopyOnWriteArrayList的迭代器时,是将迭代器里的数据引用指向当前引用指向的数据对象,无论未来发生什么写操作,都不会再更改迭代器里的数据对象引用,所以迭代器也很安全(这里应用了常识2)。
CopyOnWriteArrayList中写操作需要大面积复制数组,所以性能肯定很差,但是读操作因为操作的对象和写操作不是同一个对象,读之间也不需要加锁,读和写之间的同步处理只是在写完后通过一个简单的“=”将引用指向新的数组对象上来,这个几乎不需要时间,这样读操作就很快很安全,适合在多线程里使用,绝对不会发生ConcurrentModificationException,所以最后得出结论:CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。
转载于:https://www.cnblogs.com/sunwei2012/archive/2010/10/08/1845656.html
读CopyOnWriteArrayList有感相关推荐
- 新生 语不惊人死不休 —— 《无限恐怖》读后有感
开篇声明,我博客中"小心情"这一系列,全都是日记啊随笔啊什么乱七八糟的.如果一不小心点进来了,不妨直接关掉.我自己曾经写过一段时间的日记,常常翻看,毫无疑问我的文笔是很差的,而且心 ...
- DayDayUp:2019.12.30吴晓波2020年终秀演讲《预见2020:来海边,拾起信心》读后有感
DayDayUp:2019.12.30吴晓波2020年终秀演讲<预见2020:来海边,拾起信心>读后有感 导读:2019年,过的好不好?有人豪情万丈,有人强颜欢笑. 互联网平台带来了方便快 ...
- 大道至简 读后有感
大道至简 读后有感 今天的读后感是在读完第二章之后写的,这一章的标题乍一看很有意思,题为是懒人造就了方法,其实细细一品,很是有道理.这章也分为四节,分别是"是懒人造就了方法", ...
- 读后有感 - UI设计师必知:线框图、原型和视觉稿
读后有感 - UI设计师必知:线框图.原型和视觉稿 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作 ...
- 读后有感 - 残忍但诚实的忠告:您没钱,就不要掺和这事了
读后有感 - 残忍但诚实的忠告:您没钱,就不要掺和这事了 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致" ...
- 复旦大学《数学分析》教学大纲,读后有感
该<分析>大纲读后,犹如时间倒转,回到19世纪的马克思撰写<数学手稿>时代,-- 但是,时光不能倒流.进入20世纪,数学公理化时代终于到来了.1930年,哥德尔紧致性定理:19 ...
- 人为什么而活着-----听苏鹏读白有感
今天在苏鹏老师的个人blog站点上(www.supengcast.net),看到一则关于"人为什么活着"的贴子, 贴子的主题是 这 样的-----"最近有个负面新闻 ...
- 有人负责,才有质量:写给在集市中迷失的一代(读后有感)
读了这篇文章以后,确实引发了我很多的思考,也对我接下来的学习有了很大的帮助. 简单概括为以下几点: 1.许多人虽作为一名IT人士,但他们的基本功不扎实,仍有欠缺,也缺乏规范化开发软件的过程. 作者说, ...
- 读文有感-惠普前总裁孙振耀指点职业规划
我一般读文章很少转帖,为什么呢?当你在google搜索一个主题的时候,发现出来一篇文章,你接着想多看几篇相关的文章,获得更多的思路的时候,往往你发现很多来自于多个网站的,但内容都还是和第一页看到相同的 ...
最新文章
- 2019年牛客多校第1场 赛后总结
- CIA败给维基解密 专家称AI将改变黑客行为
- Linux 配置nfs
- easyui tabs 使用iframe 出现两个垂直滚动条 解决方法
- JZOJ 5274. 数组
- 应用回归分析何晓群_二战上岸人大20年应用统计高分经验帖
- 前端学习(2040)vue之电商管理系统电商系统之执行build命令所有的警告
- 第十二题:设int x=1,float y=2,则表达式x/y的值是:
- Facebook 有序队列服务设计原理和高性能浅析
- linux下创建svn仓库及用户
- Access数据库学习总结(1)
- 转录组:STAR-Fusion融合基因
- 2022-2027年中国氮化硼行业市场运行现状及投资战略研究报告
- 最新各大互联网公司薪酬盘点!你想好去哪家了吗?
- html中加号实体,纯css实现加号“+”效果(代码示例)
- unity3D -- 压缩图片
- 应届毕业生2012求职之路
- C# Dictionary源码解析
- C语言编程>第十八周 ⑧ 给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。
- Mysql如何实现隔离级别 - 可重复读和读提交 源码分析
热门文章
- python编程 语言-Python现在还是最火的编程语言吗?
- python 画图 内存-用python 10min手写一个简易的实时内存监控系统
- python量化投资必背代码-基于python的开源量化交易,量化投资架构
- python编程基础语法-Python编程基础语法快速入门
- python处理excel教程实例-python如何处理excel数据
- 初学者python用哪个版本好-python用哪个版本好
- 编程没基础学python多长时间--零基础学Python,从入门到精通需要多长时间
- python主要用于什么-python主要用于哪些方向
- python怎么读文件内容-Python读取文件内容为字符串的方法(多种方法详解)
- python从小到大的顺序输出-python从小到大的顺序输出