Τι είναι το Wait and Notify στη Java;



Το Wait and Notify in Java είναι οι δύο τελικές μέθοδοι που επιτρέπουν στα νήματα να επικοινωνούν μεταξύ τους. Αυτό το άρθρο θα σας βοηθήσει με τις λεπτομέρειες

Η λειτουργία Java επιτρέπει ταυτόχρονη εκτέλεση δύο ή περισσότερων τμημάτων ενός προγράμματος. Κάθε μέρος είναι ένα νήμα. Αυτά τα θέματα πρέπει συχνά να συντονίζουν τις ενέργειές τους. Αυτό γίνεται χρησιμοποιώντας μερικές τελικές μεθόδους όπως το Wait και το Notify στην Java. Αυτό το άρθρο θα σας βοηθήσει να κατανοήσετε λεπτομερώς αυτές τις μεθόδους.

Θα συζητήσω τα θέματα με την ακόλουθη σειρά:





Ας ξεκινήσουμε!

Τι είναι ο συγχρονισμός νημάτων;

Τα προγράμματα πολλαπλών νημάτων ενδέχεται να αντιμετωπίζουν τακτικά μια κατάσταση όπου πολλαπλά προσπαθήστε να φτάσετε στον ίδιο πόρο που παράγει δόλια και εκπληκτικά αποτελέσματα. Κατά καιρούς, περισσότερα από ένα νήματα ενδέχεται να προσπαθήσουν να αποκτήσουν πρόσβαση σε έναν κοινόχρηστο πόρο, πρέπει να διασφαλίσετε ότι ο πόρος θα χρησιμοποιείται μόνο από ένα νήμα τη φορά. Αυτό μπορεί να γίνει χρησιμοποιώντας Συγχρονισμός σε Java.



Τώρα μιλάμε για Polling. Η δημοσκόπηση είναι μια διαδικασία δοκιμής μιας κατάστασης επανειλημμένα έως ότου είναι αλήθεια. Αυτή η μέθοδος εφαρμόζεται με τη βοήθεια του για να ελέγξετε αν μια συγκεκριμένη κατάσταση είναι αληθής ή όχι. Μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο για νήματα, αλλά αυτή η μέθοδος σπαταλά πολλούς κύκλους CPU και επίσης καθιστά τη διαδικασία εφαρμογής πολύ αναποτελεσματική. Για την αποφυγή τέτοιων σφαλμάτων, εισάγονται μέθοδοι όπως το Wait και το Notify in Java.

Τι είναι οι μέθοδοι Wait () και Notify ();

Για την αντιμετώπιση του προβλήματος πολλαπλών νημάτων, μέθοδοι όπως το Wait and Notify in είναι μεταχειρισμένα. Η κλάση αντικειμένων χρησιμοποιεί αυτές τις τρεις τελικές μεθόδους που επιτρέπουν στα νήματα να επικοινωνούν σχετικά με την κλειδωμένη κατάσταση ενός πόρου. Ονομάζονται επίσης ως φρουρά μπλοκ.

βαθιά μάθηση έναντι μηχανικής μάθησης έναντι αναγνώρισης προτύπων

Περίμενε()

Αυτή η μέθοδος αναγκάζει το νήμα να περιμένει έως ότου ένα άλλο νήμα επικαλεστεί τις μεθόδους notify () και notifyAll () για αυτό το αντικείμενο. Αυτή η μέθοδος Wait () λέει στο νήμα κλήσης να αφήσει ένα κλείδωμα και να κοιμηθεί έως ότου κάποιο άλλο νήμα εισέλθει στην ίδια οθόνη και καλεί να ειδοποιήσει (). Αυτή η μέθοδος απελευθερώνει το κλείδωμα πριν από την αναμονή και αποκτά το κλείδωμα πριν επιστρέψει από τη μέθοδο αναμονής ().



Η μέθοδος Wait () ενσωματώνεται σφιχτά στο κλείδωμα συγχρονισμού. Αυτό γίνεται χρησιμοποιώντας μια λειτουργία που δεν είναι διαθέσιμη απευθείας από τον μηχανισμό συγχρονισμού.

Σύνταξη:

συγχρονισμένο (lockObject) {while (! condition) {lockObject.wait ()} // κάντε την ενέργεια εδώ}

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

Κοινοποιώ()

Αυτή η μέθοδος χρησιμοποιείται για την ειδοποίηση του ότι πρέπει να λειτουργήσει. Ξυπνά ένα νήμα που ονομάζεται Περίμενε() μέθοδο στο ίδιο αντικείμενο.

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

Σύνταξη:

συγχρονισμένο (lockObject) {// create_the_condition lockObject.notify () // τυχόν πρόσθετος κωδικός εάν χρειάζεται}

ΕιδοποίησηΌλα ()

Αυτή η μέθοδος χρησιμοποιείται για να ξυπνήσει όλα τα νήματα που είχαν ονομάσει wait () στο ίδιο αντικείμενο. Το νήμα με την υψηλότερη προτεραιότητα θα τρέξει πρώτα στις περισσότερες περιπτώσεις, παρόλο που δεν είναι εγγυημένο. Άλλα πράγματα είναι τα ίδια με τη μέθοδο ειδοποίησης ().

Γιατί και πώς να χρησιμοποιήσετε το Wait () και Notify () στην Java;

Πρέπει να χρησιμοποιήσετε το Wait and Notify in επειδή σχετίζονται με το κλείδωμα και το αντικείμενο έχει κλειδαριά. Παρόλο που η αναμονή και ειδοποίηση στην Java είναι μια θεμελιώδης έννοια, ορίζονται στο κλάση αντικειμένων . Παραδόξως, δεν είναι τόσο εύκολο να γράψετε τον κώδικα χρησιμοποιώντας την αναμονή και την ειδοποίηση. Μπορείτε να το δοκιμάσετε γράφοντας κώδικα για να επιλύσετε το πρόβλημα παραγωγού-καταναλωτή χρησιμοποιώντας την αναμονή και την ειδοποίηση. Παράδειγμα καταναλωτή παραγωγού-Περιμένετε και ειδοποιήστε στο Java-EdurekaΕδώ, έχω ένα κοινόχρηστο Ουρά καιδύο νήματαπου ονομάζεται Παραγωγός και Καταναλωτής . Παραγωγός Το νήμα βάζει τον αριθμό σε μια κοινόχρηστη ουρά και Καταναλωτής Το νήμα καταναλώνει τους αριθμούς από τον κοινόχρηστο κάδο.

Η προϋπόθεση είναι ότι μόλις παραχθεί ένα είδος, το νήμα του καταναλωτή πρέπει να ειδοποιηθεί και ομοίως, μετά το νήμα του παραγωγού κατανάλωσης πρέπει να ειδοποιηθεί. Αυτό το νήμαεπικοινωνίαεπιτυγχάνεται με χρήση αναμονής και ειδοποίησης σε Java.

Σημείωση : W.ait και ΌχιΟι μέθοδοι tify καθορίζονται στην κατηγορία αντικειμένων, και πρέπει να κληθούν μέσα σε συγχρονισμένο μπλοκ.

Παράδειγμα

δημόσια κλάση Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Αναμονή για ολοκλήρωση 2 ...' ) b.wait ()} catch (InterruptException e) {e.printStackTrace ()} System.out.println ('Σύνολο είναι:' + b.total)}}} η κλάση Thread2 επεκτείνει το Thread1 {int total @Override public void run () {συγχρονισμένο (αυτό) {για (int i = 0 i<=100 i++) { total += i } notify() }}}

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

Παραγωγή:

Αυτό μας φέρνει στο τέλος αυτού του άρθρου όπου μάθαμε το στο Wait and Notify in Java.Ελπίζω ότι το προαναφερθέν περιεχόμενο αποδείχθηκε χρήσιμο για τη βελτίωση του περιεχομένου σας η γνώση. Συνεχίστε να διαβάζετε, συνεχίστε!

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