fail-fast 快速失败
-
一个线程在读取集合种的数据时,另外一个线程在修改集合会导致fail-fast
-
ArrayList HashMap 具备此机制
Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1,"Joshua"); map.put(2,"sophia"); map.put(3,"Linda"); Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator(); while (iterator.hasNext()){ System.out.println(iterator.next().getValue());
//修改 map.put(5,"jjj"); } List<String> list = new ArrayList<String>(); list.add("kkk"); list.add("ddhh"); list.add("dddd"); list.add("hhh"); list.stream().forEach((l)->{ System.out.println(l);
//修改 list.add("lll"); });
fail-safe 安全失败
采用安全失败机制的集合,在遍历时,先复制原来的集合,遍历的是复制的集合,在修改时,并不会被迭代器检测到,保证了安全性
- 实现安全机制的集合:CopyOnWriteArrayList、CurrentHashMap
- 不会输出添加或修改的内容
- JUC下的包都是安全的可在多线程下使用
CopyOnWriteArrayList<Integer> list = new CopyOnWriteArrayList<>(); list.add(4455); list.add(55); list.add(77); list.add(77); list.stream().forEach((s)->{ System.out.println(s); list.add(144); }); /* 4455 55 77 77 */
标签:map,Java,iterator,safe,list,fast,add,fail From: https://www.cnblogs.com/Joshua-BlueSky/p/16785154.html