一,定义

  CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。目前Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。

二,优缺点

  CopyOnWrite容器有很多优点,但是同时也存在两个问题,即内存占用问题和数据一致性问题。所以在开发的时候需要注意一下。

  1,内存占用问题。因为CopyOnWrite的写时复制机制,所以在进行写操作的时候,内存里会同时驻扎两个对象的内存,旧的对象和新写入的对象(注意:在复制的时候只是复制容器里的引用,只是在写的时候会创建新对象添加到新容器里,而旧容器的对象还在使用,所以有两份对象内存)。针对内存占用问题,可以通过压缩容器中的元素的方法来减少大对象的内存消耗或使用其他的并发容器。

  2,数据一致性问题。CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性。所以如果你希望写入的的数据,马上能读到,那就不可以用CopyOnWrite容器

最新文章

  1. POJ2289-Jamie's Contact Groups-二分图多重匹配-ISAP
  2. OI再见
  3. CSS——清除浮动
  4. C Primer Plus之位操作
  5. 通过xshell 设置代理上网
  6. 云服务器 ECS Linux 系统添加“回收站”
  7. 转:JAVA中this用法小结
  8. monkeyrunner工具同Monkey工具的差别
  9. Android相机是如何获取到图像的
  10. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](八)
  11. oracle数据库--序列(sequence)
  12. Mac 在terminal 上用命令打开sublime
  13. B+树及数据库索引的应用
  14. impala与hive的比较以及impala的有缺点
  15. nodejs基础 -- 路由
  16. CP2102
  17. java基础之基础语法详录
  18. jQuery框架-3.jQuery自定义封装插件和第三方插件
  19. Swift 函数提前返回
  20. Docker技术初体验

热门文章

  1. JavaScript之Object
  2. Masonry 实现输入框随键盘位置改变
  3. 【FFT】专题总结
  4. 轻松学Shell之认识正规表达式
  5. Spark的优点
  6. Hadoop MapReduce概念学习系列之shuffle大揭秘(十九)
  7. WT588D播放合成语音时出现某些语句不能正常播报的情况,经过对比其他语句,看似有点不符合逻辑。
  8. A Dream
  9. Oracle 分区字段数据更新
  10. Binding的Source从何而来?