Αποτυχία γρήγορα και αποτυχία ασφαλείς επαναληπτές στην Java: Ποια είναι η διαφορά;



Αυτό το άρθρο σχετικά με το 'Fail Fast and Fail Safe Iterators' θα σας βοηθήσει να συγκρίνετε αυτούς τους δύο επαναληπτικούς ελέγχους λεπτομερώς με σχετικά παραδείγματα.

υποστηρίξτε δύο τύπους επαναληπτικών, ο πρώτος είναι γρήγορος αποτυχίας και ο δεύτερος είναι ασφαλής. Αυτά διαδραματίζουν ζωτικό ρόλο όσον αφορά τον χειρισμό εξαιρέσεων στην Java. Σε αυτό το άρθρο σχετικά με το 'Fail Fast and Fail Safe Iterators', θα αναλύσουμε τη λειτουργία των δύο επαναληπτών καθώς και τη βασική διαφορά μεταξύ τους.

Ακολουθούν οι δείκτες που θα συζητηθούν σε αυτό το άρθρο:





Πριν μπείτε σε μια λεπτομερή εξήγηση, ας εξοικειωθούμε με την έννοια της ταυτόχρονης τροποποίησης.

Ταυτόχρονη τροποποίηση

Όταν ένα μόνο νήμα (ή πολλά νήματα) επαναλαμβάνεται σε μια συλλογή, μπορεί να αλλάξει τη δομή της συλλογής, είτε προσθέτοντας είτε διαγράφοντας το στοιχείο στη συλλογή, είτε ενημερώνοντας την τιμή του στοιχείου σε μια συγκεκριμένη θέση. Αυτή η διαδικασία είναι γνωστή ως ταυτόχρονη τροποποίηση.



Ας ρίξουμε μια γρήγορη ματιά στα δύο Συστήματα που αφορούν το παραπάνω θέμα, προτού αναφερθούμε στις λεπτομέρειες του ίδιου,

Αποτυχία γρήγορου συστήματος:

Ένα σύστημα ονομάζεται σύστημα γρήγορης αποτυχίας, εάν τερματιστεί αμέσως μετά την εμφάνιση σφάλματος. Οι λειτουργίες ακυρώνονται αμέσως και εκτίθενται οι αστοχίες ή τα λάθη.

Σύστημα εξασφαλισμένης λειτουργίας:

Ένα σύστημα ονομάζεται σύστημα ασφαλούς αποτυχίας, εάν συνεχίσει να λειτουργεί ακόμα και μετά από σφάλμα ή σφάλμα. Δεν ακυρώνουν μια λειτουργία και δεν κρύβουν τα σφάλματα αντί να τα εκθέτουν.



Οι επαναληπτές στην Ιάβα μας επιτρέπουν να διασχίζουμε τα αντικείμενα της Συλλογής. Οι επαναληπτές που επέστρεψε η Συλλογή είτε αποτυγχάνουν γρήγορα είτε δεν έχουν ασφαλή χαρακτήρα.

Αποτυχία Fast Iterator

Η αποτυχία γρήγορων επαναληπτών στην Java δεν επιτρέπει οποιονδήποτε τύπο δομικής τροποποίησης σε μια συλλογή κατά την επανάληψη της. Η δομική τροποποίηση περιλαμβάνει την προσθήκη, την αφαίρεση ή την ενημέρωση οποιουδήποτε στοιχείου στη συλλογή κατά την επανάληψη της. Ο επαναληπτής ρίχνει ένα ConcurrentModificationException, εάν μια συλλογή τροποποιείται δομικά κατά τη διάρκεια της διαδικασίας επανάληψης.

Ωστόσο, πρέπει να σημειωθεί ότι εάν ένα στοιχείο καταργηθεί χρησιμοποιώντας τη μέθοδο iterators, δηλαδή τη μέθοδο κατάργησης (), δεν υπάρχει εξαίρεση. Είναι μια απολύτως ασφαλής διαδικασία. βεβαιωθείτε ότι έχετε java εγκατεστημένο στο σύστημά σας

Παράδειγμα Fail Fast Iterator:

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', 'January ') monthIndex.put (' 2 ',' February ') monthIndex.put (' 3 ',' March ') Iterator iterator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // η προσθήκη ενός στοιχείου στο Map // εξαίρεση θα εμφανιστεί στην επόμενη κλήση // της επόμενης () μεθόδου. monthIndex.put ('4', 'April')}}}

Παραγωγή:

Εξαίρεση στο νήμα 'main' java.util.ConcurrentModificationException

στο java.util.HashMap $ HashIterator.nextEntry (Άγνωστη πηγή)

Τώρα ας προχωρήσουμε και ρίξτε μια ματιά στο Fail Safe Iterator,

Αποτυχία ασφαλούς επανάληψης

Σε αντίθεση με τους επαναληπτές Fail Fast, οι επαναληπτές Fail Safe δεν απορρίπτουν εξαιρέσεις εάν η συλλογή τροποποιηθεί κατά τη διαδικασία επανάληψης. Αυτό οφείλεται στο γεγονός ότι επαναλαμβάνουν τον κλώνο της συλλογής, αντί της πραγματικής συλλογής. Οι δομικές τροποποιήσεις που γίνονται στην πραγματική συλλογή δεν γίνονται αντιληπτές από αυτούς.

Ωστόσο, θα πρέπει να σημειωθεί ότι δεν υπάρχει πράγματι ένα πράγματι Fail Safe Iterator. Θα ήταν σκόπιμο να το ορίσουμε ως αδύναμα-συνεπές. Αυτό σημαίνει απλά αυτό αν μια Συλλογή τροποποιείται κατά τη διάρκεια της διαδικασίας επανάληψης, αυτό που βλέπει ο Iterator είναι ελάχιστα εγγυημένο. Αυτή η συμπεριφορά διαφέρει για διαφορετικές συλλογές και τεκμηριώνεται στο Javadocs.

Παράδειγμα Iterator Fail Safe:

δημόσια τάξη 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 () ενώ (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'Απρίλιος')}}}

Παραγωγή:

  • Ιανουάριος
  • Φεβρουάριος
  • Μάρτιος

Τέλος σε αυτό το άρθρο θα συγκρίναμε αυτούς τους επαναληπτικούς,

Διαφορές: Αποτυχία γρήγορα και αποτυχία ασφαλής επανάληψης

Παρακάτω αναφέρονται οι βασικές διαφορές μεταξύ των δύο επαναληπτικών:

Παράμετροι Αποτυχία Fast Iterator Αποτυχία ασφαλούς επανάληψης
Ρίξτε την εξαίρεση ταυτόχρονης τροποποίησης

Ναι, ρίχνουν το CocurrentModificationExcepti-on εάν μια συλλογή τροποποιηθεί κατά την επανάληψη της.

Όχι, δεν κάνουν καμία εξαίρεση εάν μια συλλογή τροποποιηθεί κατά την επανάληψη της.

Κλωνοποιήστε τη συλλογή

Όχι, χρησιμοποιούν την αρχική συλλογή για να διασχίσουν τα στοιχεία.

η ανάμειξη δεδομένων πίνακα δεν λειτουργεί

Ναι, χρησιμοποιούν το αντίγραφο της αρχικής συλλογής για να διασχίσουν.

Overhead Μνήμης

Όχι, δεν απαιτούν επιπλέον μνήμη.

Ναι, απαιτούν επιπλέον μνήμη για να κλωνοποιήσουν τη συλλογή.

Παραδείγματα

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Αυτοί οι επαναληπτικοί τόσο μοναδικοί όσο και πολύ απαραίτητοι στη ευέλικτη γλώσσα της java. Παρόλο που το safe safe έχει έναν άνετο δακτύλιο, ο αποτυχημένος γρήγορος επαναληπτής αποδεικνύεται ισχυρός.

Αυτό φέρνει στο τέλος αυτού του άρθρου. σε περίπτωση που θέλετε να μάθετε περισσότερα, ρίξτε μια ματιά στο από την Edureka. Το μάθημα εκπαίδευσης και πιστοποίησης Java J2EE και SOA της Edureka έχει σχεδιαστεί για να σας δώσει μια πρώτη αρχή στον προγραμματισμό Java και να σας εκπαιδεύσει τόσο για βασικές όσο και για προχωρημένες ιδέες Java μαζί με διάφορα πλαίσια Java όπως το Hibernate & Spring.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων αυτού του ιστολογίου 'Fail Fast vs Fail Safe' και θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό.