supporta due tipi di iteratori, il primo è veloce e il secondo è sicuro. Questi svolgono un ruolo fondamentale quando si tratta di gestire le eccezioni in Java. In questo articolo su 'Fail Fast and Fail Safe Iterators', analizzeremo il funzionamento dei due iteratori e la differenza essenziale tra loro.
Di seguito sono riportati i suggerimenti da discutere in questo articolo:
grafico ad anello vs grafico a torta
Prima di entrare in una spiegazione dettagliata, familiarizziamo con il concetto di modifica simultanea.
Modifica simultanea
Quando un singolo thread (o più thread), itera su una raccolta, può modificare la struttura della raccolta, aggiungendo o eliminando l'elemento nella raccolta o aggiornando il valore dell'elemento in una posizione particolare. Questo processo è noto come modifica simultanea.
Diamo rapidamente uno sguardo ai due Sistemi che riguardano l'argomento di cui sopra, prima di entrare nel dettaglio dello stesso,
Fail Fast System:
Un sistema viene etichettato come sistema fail fast, se si arresta immediatamente dopo il verificarsi di un errore. Le operazioni vengono interrotte istantaneamente e vengono esposti i guasti o gli errori.
Sistema fail-safe:
Un sistema viene etichettato come sistema fail-safe, se continuano a funzionare anche dopo che si è verificato un guasto o un errore. Non interrompono un'operazione e nascondono gli errori invece di esporli.
Gli iteratori in java ci consentono di attraversare gli oggetti Collection. Gli iteratori restituiti dalla raccolta sono di natura fail fast o fail safe.
Fail Fast Iterator
Gli iteratori veloci in errore in Java non consentono alcun tipo di modifica strutturale a una raccolta durante l'iterazione su di essa. La modifica strutturale include l'aggiunta, la rimozione o l'aggiornamento di qualsiasi elemento nella raccolta durante l'iterazione su di esso. L'iteratore genera un'eccezione ConcurrentModificationException, se una raccolta viene modificata strutturalmente durante il processo di iterazione.
Tuttavia, è necessario notare che se un elemento viene rimosso utilizzando il metodo degli iteratori, ovvero il metodo remove (), non viene generata alcuna eccezione. È un processo completamente sicuro. assicurati di avere java installato sul tuo sistema
Esempio di Iteratore Fail Fast:
import java.util.HashMap import java.util.Iterator import java.util.Map public class FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'gennaio ') monthIndex.put (' 2 ',' February ') monthIndex.put (' 3 ',' March ') Iterator iterator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // l'aggiunta di un elemento a Map // verrà lanciata un'eccezione alla chiamata successiva // del metodo next (). monthIndex.put ('4', 'April')}}}
Produzione:
Eccezione nel thread 'main' java.util.ConcurrentModificationException
in java.util.HashMap $ HashIterator.nextEntry (origine sconosciuta)
è meglio di kotlin di java
Ora andiamo avanti e diamo un'occhiata a Fail Safe Iterator,
Iteratore a prova di errore
A differenza degli iteratori Fail Fast, gli iteratori Fail Safe non generano eccezioni se la raccolta viene modificata durante il processo di iterazione. Ciò è dovuto al fatto che iterano sul clone della raccolta, anziché sulla raccolta effettiva. Le modifiche strutturali apportate alla collezione attuale passano inosservate.
Tuttavia, va notato che non esiste un vero Iteratore Fail Safe. Sarebbe appropriato definirlo come debolmente coerente. Questo significa semplicemente quello Se una Collection viene modificata durante il processo di iterazione, ciò che vede l'iteratore è debolmente garantito. Questo comportamento è diverso per le diverse raccolte ed è documentato in Javadocs.
Esempio di iteratore fail-safe:
public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () 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 ())) monthIndex.put ( '4', 'aprile')}}}
Produzione:
- gennaio
- febbraio
- marzo
Infine in questo articolo confronteremo questi iteratori,
Differenze: Iteratore Fail Fast e Fail Safe
Di seguito sono riportate le differenze essenziali tra i due iteratori:
Parametri | Fail Fast Iterator | Iteratore a prova di errore |
Genera eccezione ConcurrentModification | Sì, generano CocurrentModificationExcepti-on se una raccolta viene modificata durante l'iterazione su di essa. | No, non generano alcuna eccezione se una raccolta viene modificata durante l'iterazione su di essa. |
Clona la raccolta | No, usano la collezione originale per attraversare gli elementi. | Sì, usano la copia della collezione originale per attraversare. |
Overhead di memoria | No, non richiedono memoria aggiuntiva. | Sì, richiedono memoria aggiuntiva per clonare la raccolta. |
Esempi | HashMap, Vector, ArrayList, HashSet | CopyOnWriteArrayList |
Questi iteratori sono unici e molto necessari nel versatile linguaggio di java. Sebbene il fail safe abbia un anello confortante, l'iteratore fail fast si dimostra robusto.
Questo porta alla fine di questo articolo. nel caso in cui desideri saperne di più, controlla il di Edureka. Il corso di formazione e certificazione Java J2EE e SOA di Edureka è progettato per darti un vantaggio nella programmazione Java e addestrarti per i concetti Java di base e avanzati insieme a vari framework Java come Hibernate e Spring.
Hai domande per noi? Si prega di menzionarlo nella sezione commenti di questo blog 'Fail Fast vs Fail Safe' e ti risponderemo il prima possibile.
somiglianze tra java e javascript