Διαφορά μεταξύ ύπνου και αναμονής στην Java

Πίνακας περιεχομένων:

Διαφορά μεταξύ ύπνου και αναμονής στην Java
Διαφορά μεταξύ ύπνου και αναμονής στην Java

Βίντεο: Διαφορά μεταξύ ύπνου και αναμονής στην Java

Βίντεο: Διαφορά μεταξύ ύπνου και αναμονής στην Java
Βίντεο: Sleep Disorders in POTS 2024, Ιούλιος
Anonim

Βασική διαφορά – ύπνος έναντι αναμονής στην Java

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

Ένα νήμα είναι η μικρότερη μονάδα επεξεργασίας στο λειτουργικό σύστημα. Είναι μια ενιαία διαδοχική ροή ελέγχου μέσα σε ένα πρόγραμμα. Τα νήματα είναι ελαφριά. Το Multithreading είναι ο μηχανισμός εκτέλεσης πολλαπλών νημάτων ταυτόχρονα. Γλώσσες προγραμματισμού όπως η Java υποστηρίζουν multithreading. Το Multithreading έχει πλεονεκτήματα επειδή επιτρέπει την εκτέλεση πολλαπλών νημάτων ταυτόχρονα και τα νήματα είναι ανεξάρτητα μεταξύ τους. Υπάρχουν μέθοδοι στην Java που μπορούν να χρησιμοποιηθούν για πολυνηματική. Δύο από αυτούς κοιμούνται και περιμένουν.

Τι είναι ο ύπνος στην Java;

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

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

Υπάρχουν διάφορες μέθοδοι διαθέσιμες στην κλάση νήματος για την εκτέλεση διαφορετικών εργασιών. Η μέθοδος ύπνου χρησιμοποιείται για τον ύπνο της μεθόδου για συγκεκριμένο χρονικό διάστημα. Η σύνταξη για τη μέθοδο ύπνου είναι δημόσια κενό ύπνο (μεγάλα χιλιοστά του δευτερολέπτου) ρίξεις InterruptedException. Αναγκάζει το νήμα που εκτελείται να σταματήσει προσωρινά την εκτέλεση για έναν καθορισμένο αριθμό χιλιοστών του δευτερολέπτου. Εάν ένα άλλο νήμα διακόψει το τρέχον νήμα, η κατάσταση διακοπής του τρέχοντος νήματος διαγράφεται όταν απορριφθεί αυτή η εξαίρεση.

Διαφορά μεταξύ ύπνου και αναμονής στην Java
Διαφορά μεταξύ ύπνου και αναμονής στην Java

Εικόνα 01: Πρόγραμμα Java με Μέθοδος ύπνου

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

Τι είναι η αναμονή στην Java;

Πολλά νήματα ενδέχεται να έχουν πρόσβαση σε έναν κοινόχρηστο πόρο. Μπορεί να προκαλέσει τη δημιουργία εσφαλμένης εξόδου. Ο συγχρονισμός νημάτων μπορεί να χρησιμοποιηθεί για τη δημιουργία μόνο ενός νήματος για πρόσβαση στον κοινόχρηστο πόρο. Υποθέστε μια κατάσταση ως εξής. Εάν υπάρχουν δύο νήματα ως t1 και t2, το t1 ξεκινά να αποθηκεύει τιμές σε ένα αρχείο κειμένου που ονομάζεται Text1.txt. Αυτές οι τιμές θα χρησιμοποιηθούν για κάποιους άλλους υπολογισμούς όταν επιστρέψει το t1. Εάν το t2 ξεκινά πριν επιστρέψει το t1, το t2 μπορεί να αλλάξει τις τιμές που αποθηκεύονται από το t1. Αυτό μπορεί να προκαλέσει το t1 να παρέχει λάθος έξοδο. Με τη βοήθεια του συγχρονισμού, όταν το t1 ξεκινά να χρησιμοποιεί το αρχείο Text1.txt, αυτό το αρχείο μπορεί να κλειδωθεί, επομένως είναι προσβάσιμο μόνο από το t1. Το t2 δεν μπορεί να το αλλάξει έως ότου το t1 απελευθερώσει το κλείδωμα για πρόσβαση σε αυτό το αρχείο κειμένου. Όταν ολοκληρωθεί η εργασία, το t1 μπορεί να απελευθερώσει την κλειδαριά. Η κλειδαριά είναι επίσης γνωστή ως οθόνη.

Ο συγχρονισμός νημάτων μπορεί να επιτευχθεί με επικοινωνία μεταξύ νημάτων. Ένα κρίσιμο τμήμα είναι ένα τμήμα κώδικα που έχει πρόσβαση στους κοινόχρηστους πόρους. Στην επικοινωνία μεταξύ νημάτων, ένα νήμα τίθεται σε παύση που εκτελείται στο κρίσιμο τμήμα του και ένα άλλο νήμα επιτρέπεται να εισέλθει στο ίδιο κρίσιμο τμήμα για να εκτελεστεί. Υλοποιείται χρησιμοποιώντας μεθόδους αναμονής, ειδοποίησης και ειδοποίησηςΌλες. Ανήκουν στην κατηγορία Object. Η μέθοδος αναμονής χρησιμοποιείται για να επιτρέψει στο τρέχον νήμα να απελευθερώσει το κλείδωμα και να περιμένει έως ότου ένα άλλο νήμα καλέσει τη μέθοδο notify ή notifyAll για το αντικείμενο. Η μέθοδος ειδοποίησης χρησιμοποιείται για την αφύπνιση ενός μεμονωμένου νήματος που περιμένει το κλείδωμα. Το notifyAll ξυπνά όλα τα νήματα που περιμένουν στο κλείδωμα.

Διαφορά μεταξύ ύπνου και αναμονής στο Java_Figure 02
Διαφορά μεταξύ ύπνου και αναμονής στο Java_Figure 02

Εικόνα 02: Τάξη αριθμομηχανής

Βασική διαφορά μεταξύ ύπνου και αναμονής στην Java
Βασική διαφορά μεταξύ ύπνου και αναμονής στην Java

Εικόνα 03: Κύρια μέθοδος

Η κλάση Calculator επεκτείνει το νήμα. Το συγχρονισμένο μπλοκ βρίσκεται μέσα στη μέθοδο εκτέλεσης. Η μέθοδος για βρόχο και ειδοποίηση βρίσκεται μέσα στο συγχρονισμένο μπλοκ. Μέσα στην κύρια μέθοδο, δημιουργείται ένα στιγμιότυπο ενός νήματος και η μέθοδος έναρξης καλείται σε αυτό το στιγμιότυπο. Η κύρια μέθοδος θα περιμένει έως ότου το νήμα δώσει μια ειδοποίηση. Κατά την εκτέλεση του προγράμματος, η κύρια μέθοδος περιμένει έως ότου ολοκληρωθεί η εκτέλεση της μεθόδου εκτέλεσης και περιμένει τη μέθοδο ειδοποίησης. Μόλις κληθεί η μέθοδος ειδοποίησης, η κύρια μέθοδος σταματά να περιμένει και ξεκινά την εκτέλεση του υπόλοιπου κώδικα. Το Main περιμένει μέχρι να ολοκληρωθεί το νήμα του Calculator. Τέλος, εκτυπώνεται το αποτέλεσμα του αθροίσματος.

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

Αριθμομηχανή t1=νέα Αριθμομηχανή ();

t1. έναρξη ();

System.out.println (t1.sum);

Ποια είναι η ομοιότητα μεταξύ ύπνου και αναμονής στην Java;

Τόσο η αναμονή όσο και η αναμονή είναι μέθοδοι που μπορούν να χρησιμοποιηθούν κατά την εφαρμογή πολλαπλών νημάτων σε Java

Ποια είναι η διαφορά μεταξύ ύπνου και αναμονής στην Java;

sleep vs αναμονή στην Java

Η μέθοδος αναστολής λειτουργίας αναγκάζει το τρέχον νήμα να αναστείλει την εκτέλεση για τον καθορισμένο αριθμό χιλιοστών του δευτερολέπτου, με την επιφύλαξη της ακρίβειας και της ακρίβειας των χρονόμετρων και των προγραμματιστών συστήματος. Η μέθοδος αναμονής αναγκάζει το τρέχον νήμα να περιμένει έως ότου ένα άλλο νήμα καλέσει τη μέθοδο notify ή notifyAll για το αντικείμενο.
Συσχέτιση με Κλείδωμα
Η μέθοδος ύπνου δεν απελευθερώνει το κλείδωμα σε ένα αντικείμενο κατά τη διάρκεια του συγχρονισμού. Η μέθοδος αναμονής απελευθερώνει το κλείδωμα κατά τη διάρκεια του συγχρονισμού.
Μέθοδος εκτέλεσης
Η μέθοδος ύπνου εκτελείται στο τρέχον νήμα. Η μέθοδος αναμονής καλείται στο αντικείμενο.
Συσχετισμένη τάξη
Ο ύπνος είναι μια μέθοδος κλάσης Thread. Η αναμονή είναι μια μέθοδος της κλάσης αντικειμένου.
Ολοκλήρωση
Η διαδικασία ύπνου ολοκληρώνεται αφού περάσει το καθορισμένο χρονικό διάστημα. Η μέθοδος αναμονής διακόπτεται καλώντας την ειδοποίηση ή την ειδοποίησηΌλες οι μέθοδοι.

Σύνοψη – ύπνος έναντι αναμονής στην Java

Υπάρχουν πολλές διεργασίες που εκτελούνται στο λειτουργικό σύστημα. Κάθε διαδικασία μπορεί να έχει πολλά νήματα. Ένα νήμα είναι η μικρότερη μονάδα επεξεργασίας σε ένα λειτουργικό σύστημα. Η γλώσσα προγραμματισμού Java υποστηρίζει multithreading. Επιτρέπει την ταυτόχρονη εκτέλεση πολλών νημάτων. Ο ύπνος και η αναμονή είναι δύο μέθοδοι που μπορούν να χρησιμοποιηθούν κατά την εφαρμογή πολλαπλών νημάτων. Η διαφορά μεταξύ αναμονής και αναμονής στην Java είναι ότι, ο ύπνος χρησιμοποιείται για την αναστολή της εκτέλεσης του τρέχοντος νήματος για τον καθορισμένο αριθμό χιλιοστών του δευτερολέπτου, ενώ η μέθοδος αναμονής χρησιμοποιείται για να αναγκάσει το τρέχον νήμα να περιμένει έως ότου ένα άλλο νήμα καλέσει το notify ή το notifyAll μέθοδος για το αντικείμενο.

Συνιστάται: