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

Différence entre la rapidité de défaillance et la sécurité de défaillance en Java

NuméroCléÉchecSécurité contre les pannes
1
Exceptions
Toute modification dans l'ensemble (par exemple, l'ajout, la suppression et la mise à jour de l'ensemble pendant un thread) échoue en itérant l'ensemble, puis en provoquant une exception de modification concurrente rapide. 
Les ensemble sécurisés contre les pannes ne provoquent pas d'exception. 
2.
Types de ensemble
ArrayList et hashmap sont des exemples d'itérateurs de faillite rapide 
CopyOnWrite et modification concurrente sont des exemples d'itérateurs sécurisés contre les pannes 
3.
Performance et mémoire
Travailler sur l'ensemble réel. Par conséquent, cet itérateur n'a pas besoin de mémoire et de temps supplémentaires 
Il traite une copie du ensemble,而非实际的 ensemble. Les coûts en termes de temps et de mémoire
4.
Modification
 L'itérateur ne permet pas de modifier le ensemble pendant l'itération.
Les itérateurs de protection contre les pannes permettent de modifier le jeu pendant l'itération.

Exemple de protection contre les pannes

public class FailSafeExample{
   public static void main(String[] args){
      ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
      //Ajouter des éléments sur la carte
      map.put("Dell", 1);
      map.put("IBM", 2);
      //Obtenir un itérateur à partir de la carte
      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);
      }
   }
}

Résultat de la sortie

IBM :2
Dell:1

Exemple de protection contre les pannes

public class FailFastExample{
   public static void main(String[] args){
      List<Integer> list = new ArrayList<Integer>();
      list.add(1);
      list.add(2);
      list.add(3);
      //Obtenir un itérateur à partir de la liste
      Iterator<Integer> it = list.iterator();
      while (it.hasNext()){
         Integer integer = (Integer) it.next();
         list.add(4);
      }
   }
}

Résultat de la sortie

Exception dans le thread "main" java.util.ConcurrentModificationException
   at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
Vous pourriez aussi aimer