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

Unterschied zwischen Fault Tolerance und Fault Safety in Java

NummerSchlüsselNicht bestandenFehler sicher
1
Ausnahmen
Jegliche Änderung in der Sammlung (z.B. hinzufügen, löschen und aktualisieren der Sammlung während eines Threads) führt dazu, dass die Sammlung iteriert wird und dann schnell eine Ausnahme wegen konurrentengesteuerter Änderung ausgelöst wird. 
Fehler sichere Sammlungen verursachen keine Ausnahmen. 
2.
Sammlungstypen
ArrayList und hashmap-Sammlungen sind Beispiele für schnell fehlende Iteratoren 
CopyOnWrite und konurrentengesteuerte Änderungen sind Beispiele für Fehler sichere Iteratoren 
3.
Leistung und Gedächtnis
statt auf der tatsächlichen Sammlung zu arbeiten. Daher benötigt dieser Iterator keine zusätzlichen Speicher und Zeit 
Es bearbeitet eine Kopie der Sammlung, nicht die tatsächliche Sammlung. Zeit- und Speicherbedarf
4.
Änderungsart
 Der Iterator ermöglicht keine Änderungen an der Sammlung während der Iteration.
Fehlerschutz-Iteratoren erlauben es, eine Sammlung während der Iteration zu ändern.

Fehlerschutzbeispiel

public class FailSafeExample{
   public static void main(String[] args){
      ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
      //Elemente auf die Abbildung hinzufügen
      map.put("Dell", 1);
      map.put("IBM", 2);
      //Iteratoren aus der Abbildung holen
      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);
      }
   }
}

Ausgaberesultat

IBM :2
Dell:1

Fehlerschutzbeispiel

public class FailFastExample{
   public static void main(String[] args){
      List<Integer> list = new ArrayList<Integer>();
      list.add(1);
      list.add(2);
      list.add(3);
      //Iteratoren aus der Liste holen
      Iterator<Integer> it = list.iterator();
      while (it.hasNext()){
         Integer integer = (Integer) it.next();
         list.add(4);
      }
   }
}

Ausgaberesultat

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