参考资料:http://blog.csdn.net/chenssy/article/details/38151189

快速失败 fail-fast 安全失败 fail-safe
java.util包下面的所有的集合类都是快速失败的 java.util.concurrent包下面的所有的类都是安全失败的
快速失败的迭代器会抛出ConcurrentModificationException异常 安全失败的迭代器不会抛出ConcurrentModificationException异常。

快速失败

是指某个线程在迭代vector的时候,不允许其他线程修改该vector的内容,这样迭代器迭代出来的结果就会不准确,如用iterator迭代collection的时候,iterator就是另外起的一个线程,它去迭代collection,如果此时用collection.remove(obj)这个方法修改了collection里面的内容的时候,就会出现ConcurrentModificationException异常,这时候该迭代器就快速失败。

比如HashMap HashSet ArrayList都是快速失败的

为什么叫快速? 我的理解:在迭代的时候,如果另一个线程修改了里面的内容,就立刻报错,而不是继续迭代。

安全失败

Iterator的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。

例如:CopyOnWriterArrayList

ArrayList 的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的。 该类产生的开销比较大,但是在两种情况下,它非常适合使用。
1:在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时。
2:当遍历操作的数量大大超过可变操作的数量时。

最新文章

  1. vs15 preview5 离线安装包
  2. Activity往另外一个Activity传值,Fragment获取另外一个Activity里面的值。
  3. 同感,C#对JSON序列化和反序列化有点蹩脚
  4. DFD
  5. linux crontab定时任务调用CI框架PHP代码
  6. 使用struts通配符报错
  7. 苹果IOS开发者账号总结--发布应用APP时team name是否可以随意写?
  8. pptp建立vpn
  9. EasyUI 格式化DataGrid列
  10. C char** 的一点儿理解
  11. Java [Leetcode 228]Summary Ranges
  12. Executing a script from Nagios event handler fails to run
  13. Windows查看电脑上安装的.Net Framework版本的五种方法(转)
  14. 用bat启动sqlserver服务
  15. SQL Tuning 基础概述10 - 体会索引的常见执行计划
  16. Java 面试宝典
  17. FindBugs简单应用
  18. 带着新人学springboot的应用04(springboot+mybatis+redis 完)
  19. 【九】虚拟机工具 02 - jstat命令使用
  20. Yarn vs npm: 你需要知道的一切(转)

热门文章

  1. Git 中README.md中MarkDown语法示例
  2. Android中的RelativeLayout
  3. 《JS原型》
  4. Nginx+keepalived做双机热备加tomcat负载均衡
  5. Tcpdump命令行 与 GUI Wireshark
  6. Qt 学习之路 :访问网络(4)
  7. Qt 属性
  8. IO流--转载
  9. Linux: FTP服务原理及vsfptd的安装、配置
  10. python 之路,Day27 - 主机管理+堡垒机系统开发