Java集合快速失败与安全失败
前言
我们在开发过程中有没有在遍历集合的时候遇到过ConcurrentModificationException
这样的异常,那么什么样的原因导致这种异常呢?本篇博客将带领大家去了解一下Java
集合fail-fast
快速失败机制与fail-safe
安全失败机制。
正文
fail-fast与fail-safe
- fail-fast快速失败机制: 是
Java
集合中的一种机制,在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出ConcurrentModificationException
。 - fail-safe安全失败机制:
java.util.concurrent
包下的容器都是安全失败,在遍历时不是直接在集合内容上访问的,而是先copy
原有集合内容,在拷贝的集合上进行遍历,因此采用安全失败的容器可以在多线程下并发使用,并发修改。
fail-fast快速失败机制
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class test { public static void main(String[] args) { testForHashMap(); } private static void testForHashMap() { HashMap<String,String> hashMap =new LinkedHashMap<>(); hashMap.put("1","a"); hashMap.put("2","b"); hashMap.put("3","c"); Iterator<Map.Entry<String,String>> iterator=hashMap.entrySet().iterator(); while (iterator.hasNext()) { hashMap.put("bloom","bloom"); System.out.println(iterator.next()); } } }
快速失败机制下修改集合元素触发快速失败,输出结果:
- 遍历集合时,新增或者删除元素,将抛
ConcurrentModificationException
异常
fail-safe安全失败机制
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public class test { public static void main(String[] args) { testForHashTable(); } private static void testForHashTable() { Hashtable<String,String> hashtable =new Hashtable(); hashtable.put("4","d"); hashtable.put("5","e"); hashtable.put("6","f"); Enumeration<String> iterator1=hashtable.elements(); while (iterator1.hasMoreElements()) { hashtable.put("bloom","bloom"); System.out.println(iterator1.nextElement()); } } }
安全失败机制下修改集合元素,输出结果
- 我们可以在遍历集合的同时,新增、删除元素
总结:
fail-fast
,它是Java
集合的一种错误检测机制。- 在用迭代器遍历一个集合对象时,如果遍历过程中不应该对集合对象的内容进行了修改(增加、删除、修改),可以新建一个新的集合进行操作。
最后
以上就是冷静柚子最近收集整理的关于Java集合快速失败与安全失败Java集合快速失败与安全失败的全部内容,更多相关Java集合快速失败与安全失败Java集合快速失败与安全失败内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复