Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでのフェイルファストとフェイルセーフの違い


失敗-高速 フェイルセーフ
Sr。いいえ。 キー
1
例外
スレッド中のコレクションの追加、削除、更新など、コレクション内の変更はすべてコレクションを繰り返し、高速スロー同時変更例外をスローします。
フェイルセーフコレクションは例外をスローしません。
2。
コレクションの種類
ArrayListとハッシュマップコレクションは、フェイルファストイテレータの例です。
CopyOnWriteと同時変更は、フェイルセーフイテレータの例です。
3。
パフォーマンスとメモリ
代わりに実際のコレクションで動作します。したがって、このイテレータは余分なメモリと時間を必要としません
実際のコレクションではなく、コレクションのクローンに取り組んでいます。時間とメモリの面でオーバーヘッドです
4。
変更
イテレータは、コレクションを反復処理している間、コレクションを変更することを許可しません。
フェイルセーフイテレータを使用すると、コレクションを反復処理しながらコレクションを変更できます。

フェイルセーフの例

public class FailSafeExample{
   public static void main(String[] args){
      ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
      //Adding elements to map
      map.put("Dell", 1);
      map.put("IBM", 2);
      //Getting an Iterator from map
      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);
      //Getting an Iterator from list
      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)

  1. JavaでのArrayListとHashSetの違い

    HashSetとArrayListはどちらも、Javaコレクションフレームワークの最も重要なクラスの一部です。 以下は、ArrayListとHashSetの重要な違いです。 Sr。いいえ。 キー ArrayList ハッシュセット 1 実装 ArrayListはリストインターフェイスの実装です。 一方、 HashSetは、セットインターフェイスの実装です。 2 内部実装 ArrayListは、その実装のために配列を内部的に実装します。 HashSetは、実装にHashmapを内部的に使用します。 3 要素の順序 ArrayListは、挿入順序、つまり

  2. JavaでのIteratorとListIteratorの違い

    Javaは、コレクションに格納されているデータを1つずつトラバースするために、これら2つのインターフェースを提供しました。イテレータとリストイテレータの内部実装により、それらは異なりますが、両方のイテレータの主なアジェンダは同じです。 IteratorとListIteratorの重要な違いは次のとおりです。 Sr。いいえ。 キー イテレータ ListIterator 1 該当する イテレータは、コレクションのタイプに関係なく、任意のコレクションをトラバースするために使用できます。 リストイテレータは、arraylist、linkedlistなどのリストコレクションが実装