Iterators Fail Fast et Fail Safe en Java: quelle est la différence?

Cet article sur «Fail Fast and Fail Safe Iterators» vous aidera à comparer ces deux itérateurs en détail avec des exemples pertinents.

prend en charge deux types d'itérateurs, le premier est fail fast et le second est fail safe. Ceux-ci jouent un rôle essentiel dans la gestion des exceptions en Java. Dans cet article sur «Fail Fast and Fail Safe Iterators», nous analyserons le fonctionnement des deux itérateurs ainsi que la différence essentielle entre eux.



Voici les pointeurs à discuter dans cet article:



Avant d'entrer dans une explication détaillée, familiarisons-nous avec le concept de modification simultanée.

Modification simultanée

Lorsqu'un thread unique (ou plusieurs threads) itère sur une collection, il peut modifier la structure de la collection, soit en ajoutant ou supprimant l'élément dans la collection, soit en mettant à jour la valeur de l'élément à une position particulière. Ce processus est appelé modification simultanée.



Examinons rapidement les deux systèmes qui concernent le sujet ci-dessus, avant d'entrer dans les détails du même,

Échec du système rapide:

Un système est qualifié de système à défaillance rapide s'il s'arrête immédiatement après l'apparition d'une erreur. Les opérations sont immédiatement abandonnées et les échecs ou les erreurs sont exposés.

Système de sécurité intégrée:

Un système est qualifié de système à sécurité intégrée s'il continue à fonctionner même après une panne ou une erreur. Ils n'annulent pas une opération et masquent les erreurs au lieu de les exposer.



Les itérateurs en java nous permettent de parcourir les objets Collection. Les itérateurs renvoyés par la collection sont soit de nature à échec rapide, soit à sécurité intégrée.

Échec de l'itérateur rapide

Les itérateurs rapides en échec en Java interdisent tout type de modification structurelle à une collection lors de son itération. La modification structurelle comprend l'ajout, la suppression ou la mise à jour de tout élément de la collection tout en l'itérant. L'itérateur lève une ConcurrentModificationException, si une collection est structurellement modifiée pendant le processus d'itération.

Cependant, il faut noter que si un élément est supprimé en utilisant la méthode propre aux itérateurs, c'est-à-dire la méthode remove (), aucune exception n'est levée. C'est un processus entièrement sûr. assurez-vous que vous avez java installé sur votre système

Exemple de Fail Fast Iterator:

import java.util.HashMap import java.util.Iterator import java.util.Map classe publique FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' February ') monthIndex.put (' 3 ',' March ') Iterator iterator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // l'ajout d'un élément à une exception Map // sera lancé au prochain appel // de la méthode next (). monthIndex.put ('4', 'April')}}}

Production:

Exception dans le thread «principal» java.util.ConcurrentModificationException

à java.util.HashMap $ HashIterator.nextEntry (source inconnue)

Maintenant, allons-y et jetons un coup d'œil à Fail Safe Iterator,

Itérateur à sécurité intégrée

Contrairement aux itérateurs Fail Fast, les itérateurs Fail Safe ne lèvent aucune exception si la collection est modifiée pendant le processus d'itération. Cela est dû au fait qu'ils itèrent sur le clone de la collection, au lieu de la collection réelle. Les modifications structurelles apportées à la collection actuelle passent inaperçues.

Cependant, il convient de noter qu'il n'existe pas d'itérateur véritablement Fail Safe. Il serait approprié de le qualifier de faiblement cohérent. Cela signifie simplement que si une Collection est modifiée au cours du processus d'itération, ce que voit l'itérateur est faiblement garanti. Ce comportement diffère selon les collections et est documenté dans Javadocs.

Exemple d'itérateur à sécurité intégrée:

public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( '3', 'Mars') Iterator iterator = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'avril')}}}

Production:

  • janvier
  • février
  • Mars

Enfin, dans cet article, nous comparerions ces itérateurs,

Différences: Iterator Fail Fast et Fail Safe

Vous trouverez ci-dessous les différences essentielles entre les deux itérateurs:

qu'est-ce que le type casting en java
Paramètres Échec de l'itérateur rapide Itérateur à sécurité intégrée
Lancer une exception de modification concurrente

Oui, ils lancent CocurrentModificationExcepti-on si une collection est modifiée lors de son itération.

Non, ils ne lèvent aucune exception si une collection est modifiée lors de son itération.

Cloner la collection

Non, ils utilisent la collection originale pour parcourir les éléments.

Oui, ils utilisent la copie de la collection originale pour parcourir.

Surcharge mémoire

Non, ils ne nécessitent pas de mémoire supplémentaire.

Oui, ils nécessitent une mémoire supplémentaire pour cloner la collection.

Exemples

HashMap, vecteur, ArrayList, HashSet

CopyOnWriteArrayList

Ces itérateurs sont à la fois uniques et indispensables dans le langage polyvalent de java. Bien que la sécurité intégrée ait un anneau réconfortant, l'itérateur rapide de défaillance s'avère robuste.

Ceci amène à la fin de cet article. au cas où vous souhaiteriez en savoir plus, consultez le par Edureka. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour vous donner une longueur d'avance dans la programmation Java et vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate et Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog «Fail Fast vs Fail Safe» et nous vous répondrons dans les plus brefs délais.