CopyOnWriteArrayList
来源:互联网 发布:苹果手机淘宝p图软件 编辑:程序博客网 时间:2024/06/07 01:58
CopyOnWriteArrayList容器的线程安全性在于:只要正确地发布一个事实不可变的对象,那么在访问该对象的时候就不再需要进一步的同步。在每次修改的时候,都会创建并重新发布一个新的容器副本,从而实现可变性。
实现线程安全的关键在于事实不可变,对象既然不可变,所以就是线程安全的,当需要的时候,就重新生成一个全新的容器,从而实现可变性。
实现方式:
(1)“写入时复制”容器的迭代器保留一个指向底层基础数组的引用,这个数组当前位于迭代器的起始位置,由于它不会被修改,因此在对其进行同步时只需确保数组内容的可见性。因此,多个线程可以同时对这个容器进行迭代,而不会彼此干扰或者修改容器的线程相互干扰。“写入时复制”不会抛出ConcurrentModificationException,并且返回的元素与迭代器创建时的元素完全一致,而不必考虑修改操作所带来的影响。
(2)显然,每次修改容器都会复制底层数组,着需要一定的开销,特别是当容器规模较大的时候。仅当迭代操作远远多于修改操作时,才应该使用“写入时复制”容器,这个准则很好地描述了许多事件通知系统:在分发通知时需要迭代已注册监听器链表,并调用每一个监听器,在大多数情况下,注册和注销事件监听器的操作远少于接收事件通知的操作。
应用场景:
可以用在EventBus中,用来作为订阅信息的存储,这里迭代操作远多于修改操作。
0 0
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- jsf中的ajax技术
- morphogenesis —— 形态发生
- 【腾讯Bugly干货分享】一步一步实现Android的MVP框架
- NCReport制作报表
- STL学习之路(一) deque
- CopyOnWriteArrayList
- java图像处理---特殊颜色二值化处理
- C#基础--之数据类型
- 遍历删除List中的元素
- 关于Java与前端jQuery的图片传输功能小结
- ExtJs6 store发送数据添加参数
- Java数据类型和运算符
- 【腾讯Bugly干货分享】iOS黑客技术大揭秘
- fatal:unable to access '...github.com/.../.git':Failed to connect to github.com port 443: Timed out