Java中故障快速和故障安全之间的区别

序号不及格故障安全
1
例外
集合中的任何更改(例如在线程期间添加,删除和更新集合)都是迭代集合,然后使快速抛出并发修改异常失败。 
故障安全集合不会引发异常。 
2。
集合类型
ArrayList和hashmap集合是快速失败迭代器的示例 
CopyOnWrite和并发修改是故障安全迭代器的示例 
3。
性能与记忆
而是在实际集合上工作。因此,此迭代器不需要额外的内存和时间 
它正在处理集合的克隆,而不是实际的集合。时间和内存方面的开销
4。
修改项
 迭代器不允许在对集合进行迭代时对其进行修改。
故障保护迭代器允许在对集合进行迭代时对其进行修改。

故障保护示例

public class FailSafeExample{
   public static void main(String[] args){
      ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
      //在映射上添加元素
      map.put("Dell", 1);
      map.put("IBM", 2);
      //从映射获取迭代器
      Iterator<String> it = map.keySet().iterator();
      while (it.hasNext()){
      String key = (String) it.next();
         System.out.println(key+" : "+map.get(key));
         map.put("Google", 3);
      }
   }
}

输出结果

IBM :2
Dell:1

故障保护示例

public class FailFastExample{
   public static void main(String[] args){
      List<Integer> list = new ArrayList<Integer>();
      list.add(1);
      list.add(2);
      list.add(3);
      //从列表中获取迭代器
      Iterator<Integer> it = list.iterator();
      while (it.hasNext()){
         Integer integer = (Integer) it.next();
         list.add(4);
      }
   }
}

输出结果

Exception in thread "main" java.util.ConcurrentModificationException
   at java.util.ArrayList$Itr.checkForComodification(Unknown Source)