English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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)