Πώς να εφαρμόσετε καλύτερα τον χάρτη ταυτόχρονης κατακερματισμού στην Java;

Αυτό το άρθρο θα σας παρουσιάσει μια ιδέα που ονομάζεται Χάρτης ταυτόχρονου κατακερματισμού στην Java και θα την ακολουθήσει με μια πρακτική επίδειξη

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



Προχωρώντας με αυτό το άρθρο σχετικά με τον ταυτόχρονο κατακερματισμό χάρτη στην Ιάβα



Πώς λειτουργεί το ConcurrentHashMap εσωτερικά;

Από την Java 5 και μετά, το ConcurrentHashMap εισάγεται ως εναλλακτική λύση για το HashTable. Μπορούμε επίσης να πάρουμε έναν συγχρονισμένο χάρτη χρησιμοποιώντας τη μέθοδο κλάσης χρησιμότητας που ονομάζεται synchronizedMap (), αλλά υπάρχει ένα μειονέκτημα αυτής της μεθόδου, δηλαδή πολύ κακή απόδοση, καθώς μόνο ένα νήμα μπορεί να έχει πρόσβαση σε αυτό ταυτόχρονα. Έτσι, το ConcurrentHashMap αντιμετωπίζει αυτά τα ζητήματα.



Προχωρώντας με αυτό το άρθρο σχετικά με τον ταυτόχρονο κατακερματισμό χάρτη στην Ιάβα

Γιατί άλλος χάρτης;

Παρόλο που έχουμε ήδη HashMap, HashTable, τότε τι χρειάζεται το ConcurrentHashMap, είναι επειδή παρέχει καλύτερη απόδοση ταυτόχρονα είναι ασφαλές για νήματα.

Προχωρώντας με αυτό το άρθρο σχετικά με τον ταυτόχρονο κατακερματισμό χάρτη στην Ιάβα



Πώς είναι διαφορετικό;

Βασίζεται επίσης σε κατακερματισμό, αλλά η απόδοσή του βελτιώνεται με τη στρατηγική κλειδώματος. Σε αντίθεση με το HashTable ή το Synchronized HashMap, δεν εφαρμόζει το ίδιο κλείδωμα σε κάθε μέθοδο που χρησιμοποιεί ξεχωριστό κλείδωμα για κάθε μέθοδο, χρησιμοποιεί κλειδί επανεισόδου για το σκοπό αυτό. Παρόμοια με το HashMap, το ConcurrentHashMap έχει 16 κουβάδες, δηλαδή τμήματα, για να δημιουργήσει το ConcurrentHashMap με περισσότερους από 16 κάδους, έχει διαφορετικούς κατασκευαστές.

Πριν μιλήσουμε λεπτομερώς ας εξετάσουμε μερικές έννοιες παρακάτω:

ConcurrentHashMap: Αυτός ο χάρτης επιτρέπει την ταυτόχρονη πρόσβαση στο νήμα. Μόνο ένα μέρος του χάρτη που ονομάζεται τμήμα, δηλαδή η υποκείμενη δομή δεδομένων κλειδώνεται κατά την προσθήκη ή την ενημέρωση του χάρτη. Επιτρέπει την ταυτόχρονη πρόσβαση στο νήμα για την ανάγνωση των δεδομένων χωρίς κλείδωμα. Εισήχθη για τη βελτίωση της απόδοσης.

  • Concurrency-Level: Είναι ένας αριθμός που είναι ένας εκτιμώμενος αριθμός ταυτόχρονης ενημέρωσης νημάτων.
  • Load-Factor: Είναι μια τιμή που χρησιμοποιείται για τον έλεγχο του παράγοντα αλλαγής μεγέθους.
  • Αρχική χωρητικότητα: Είναι μια ιδιότητα που δημιουργεί έναν χάρτη με το παρεχόμενο μέγεθος.

Ας δούμε το παρακάτω διάγραμμα και να προσπαθήσουμε να καταλάβουμε πώς λειτουργεί το ConcurrentHashMap.

Εικόνα- Ταυτόχρονο Hashmap- Edureka

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

Παρόμοια με το HashMap, το ConcurrentHashMap λειτουργεί με παρόμοιο τρόπο που περιέχει 16 τμήματα από προεπιλογή και αποθηκεύει το στοιχείο κατακερματισμό, οπότε αν τα στοιχεία έχουν τον ίδιο κατακερματισμό, αποθηκεύονται στο ίδιο τμήμα όπως φαίνεται στο παραπάνω διάγραμμα με τη βοήθεια της συνδεδεμένης λίστας.

Προχωρώντας με αυτό το άρθρο σχετικά με τον ταυτόχρονο κατακερματισμό χάρτη στην Ιάβα

Διαφορά μεταξύ ConcurrentHashMap και HashMap

Το HashMap ανήκει στις Συλλογές ενώ το ConcurrentHashMap ανήκει στις Συλλογές Συλλογών, ωστόσο υπάρχουν πολλές άλλες διαφορές μεταξύ τους.

  • Το ConcurrentHashMap είναιΑσφαλές για νήματα, δηλαδήσυγχρονισμένος αλλά το HashMap δεν είναι συγχρονισμένο.
  • Το ConcurrentHashMap έχει χαμηλή απόδοση, επειδή συγχρονίζεται επειδή μερικές φορές τα νήματα πρέπει να περιμένουν, αλλά το HashMap έχει υψηλή απόδοση, επειδή δεν είναι συγχρονισμένο και οποιαδήποτε νήματα μπορεί να έχει πρόσβαση ταυτόχρονα.
  • Θα λάβουμε το ConcurrentModificationException εάν δύο νήματα προσπαθούν ταυτόχρονα να τροποποιήσουν ή να προσθέσουν περιεχόμενο του αντικειμένου. Ωστόσο, στην περίπτωση του ConcurrentHashMap δεν θα έχουμε καμία εξαίρεση κατά την εκτέλεση της ίδιας λειτουργίας.

  • Επιτρέπονται τιμές Null για κλειδί και τιμές στο HashMap, ωστόσο, το ConcurrentHashMap δεν επιτρέπει τιμές null για το κλειδί και την τιμή που προσπάθησε να προσθέσει μηδενική τιμή, θα λάβουμε εξαίρεση, δηλαδή NullPointerException.

  • Το HashMap εισάγεται στο JDK 1.2, ενώ το ConcurrentHashMap εισάγεται στο JDK 1.5.

Όπως έχουμε δει νωρίτερα για καλύτερη απόδοση, αποτελείται από μια σειρά κόμβων ως κουβάδες τραπεζιού που ήταν τμήματα τραπεζιού πριν Java 8 .

Οι κάδοι αρχικοποιούνται αργά όταν πραγματοποιείται η πρώτη εισαγωγή. Κάθε κάδος μπορεί να κλειδωθεί ανεξάρτητα κλειδώνοντας τον πρώτο κόμβο του κάδου και οι λειτουργίες ανάγνωσης δεν μπλοκάρουν.

Σε σύγκριση με HashMap, ConcurrentHashMap παρέχει τα επιπλέον ταυτόχρονο επίπεδο όρισμα για τον έλεγχο του αριθμού των εκτιμώμενων νημάτων που θα χρησιμοποιηθούν.

Κατασκευαστές:

  1. ConcurrentHashMap m = νέο ConcurrentHashMap ()

    Δημιουργείται ένας νέος κενός χάρτης με προεπιλεγμένη αρχική χωρητικότητα 16, συντελεστή φόρτωσης 0,75 και επίπεδο ταυτότητας 16.

  2. ConcurrentHashMap m = νέο ConcurrentHashMap (intitialCapacity)
    Δημιουργείται ένας νέος κενός χάρτης με καθορισμένη αρχική χωρητικότητα, συντελεστή φόρτωσης 0,75 και επίπεδο ταυτότητας 16.

  3. ConcurrentHashMap m = νέο ConcurrentHashMap (intitialCapacity, float loadFactor)

    Δημιουργείται ένας νέος κενός χάρτης με καθορισμένη αρχική χωρητικότητα και συντελεστή φόρτωσης με επίπεδο ταυτότητας 16.

  4. ConcurrentHashMap m = νέο ConcurrentHashMap (intitialCapacity, float loadFactor, int concurrencyLevel)
    Δημιουργείται ένας νέος κενός χάρτης με καθορισμένη αρχική χωρητικότητα, συντελεστή φόρτωσης και επίπεδο ταυτότητας.

  5. ConcurrentHashMap m = νέο ConcurrentHashMap (Χάρτης m)
    Δημιουργεί νέο ConcurrentHashMap από τον παρεχόμενο χάρτη.

Τα άλλα δύο ορίσματα: initialCapacity και loadFactor λειτούργησαν σχεδόν τα ίδια με το HashMap.
Το ConcurrentMap είναι μνήμη συνεπής σε λειτουργίες κλειδιού / τιμής σε περιβάλλον πολλαπλών νημάτων.

Προχωρώντας με αυτό το άρθρο σχετικά με τον ταυτόχρονο κατακερματισμό χάρτη στην Ιάβα

Παγίδες

Ενώ η ανάκτηση αντικειμένων το ConcurrentHashMap δεν αποκλείεται και ενδέχεται να αλληλεπικαλύπτεται με λειτουργίες ενημέρωσης, επομένως για καλύτερη απόδοση ανακτούν μόνο τις πιο πρόσφατες ολοκληρωμένες λειτουργίες ενημέρωσης.

Τα αποτελέσματα των μεθόδων συγκεντρωτικής κατάστασης, όπως το μέγεθος, το isEmpty, και περιέχει την τιμή είναι συνήθως χρήσιμα μόνο όταν ένας χάρτης δεν υποβάλλεται σε ταυτόχρονες ενημερώσεις σε άλλα νήματα.

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

Αν και αυτές οι μέθοδοι δεν εγγυώνται σε πραγματικό χρόνο.

πώς να δημιουργήσετε ένα jframe

Η προεπιλεγμένη χωρητικότητα πίνακα είναι 16, ωστόσο μπορούμε να την αλλάξουμε χρησιμοποιώντας επίπεδο ταυτότητας.

δημόσιο ConcurrentHashMap (intitialCapacity, float loadFactor, int concurrencyLevel) {// ... if (initialCapacity

Εάν τα κλειδιά πλήκτρων πρέπει να είναι σε ταξινομημένη σειρά, μπορούμε να χρησιμοποιήσουμε το ConcurrentSkipListMap.

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

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