Συνιστάται, 2024

Επιλογή Συντάκτη

Διαφορά μεταξύ ύπνου () και αναμονής () Μέθοδος σε Java

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

Συγκριτικό διάγραμμα

Βάση σύγκρισηςύπνοςΠεριμένετε
ΒασικόςΗ μέθοδος Sleep δεν απελευθερώνει την κλειδαριά σε ένα αντικείμενο μέχρι να διακοπεί.Μέθοδος αναμονής απελευθερώνει την κλειδαριά στο αντικείμενο για να επιτρέψει σε άλλα αντικείμενα να εκτελέσουν μέχρι να ειδοποιήσουν ή να ειδοποιήσουνΌλες οι μέθοδοι κλήθηκαν.
ΤάξηΗ μέθοδος Sleep ορίζεται στην κλάση Thread.Η μέθοδος αναμονής ορίζεται στην κλάση Object.
ΣυγχρονισμένοΗ μέθοδος Sleep δεν χρειάζεται να καλείται στο συγχρονισμένο πλαίσιο.Η μέθοδος αναμονής πρέπει να καλείται στο συγχρονισμένο πλαίσιο.
ΟλοκλήρωσηΗ εκτέλεση της μεθόδου ύπνου ολοκληρώνεται όταν διακόπτεται ένα νήμα ή έχει λήξει η ώρα του ύπνου.Η αναμονή εκτέλεσης μεθόδου ολοκληρώνεται όταν η μέθοδος κοινοποίησης () ή notificationAll () διακόπτει τη διαδικασία.
ΣτατικόςΗ μέθοδος ύπνου είναι μια στατική μέθοδος.Η μέθοδος περιμένετε δεν είναι στατική, γι 'αυτό χρειάζεται αντικείμενο για να την επικαλεστεί.
ΕκτέλεσηΗ μέθοδος ύπνου εκτελείται στο τρέχον νήμα.Η μέθοδος αναμονής εκτελείται στο αντικείμενο.
ΕξαίρεσηΔιακοπήΕξαίρεσηΠαράνομηαπελευθέρωσηαπόκρυψη, παράνομημεταχείρισηΣύνδεση, ΔιακοπήΕξέλιξη.

Ορισμός της μεθόδου ύπνου

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

 δημόσιος στατικός κενός κενός ύπνος (μακρύς χιλιοστά του δευτερολέπτου). δημόσιος στατικός κενός ύπνος (μεγάλα χιλιοστά του δευτερολέπτου και int nanosecond). 

Στις παραπάνω δύο μορφές, μπορείτε να παρατηρήσετε ότι ο χρόνος αναφέρεται τόσο στη μορφή της μεθόδου ύπνου. Αυτό οφείλεται στο γεγονός ότι ένα νήμα πάνε πάντα για έναν συγκεκριμένο χρόνο που αναφέρεται στην παράμετρο. Η μέθοδος ύπνου μπορεί να διακοπεί από οποιοδήποτε άλλο νήμα κατά τη διάρκεια της εκτέλεσης. Ως εκ τούτου, μπορεί να ρίξει το Διακεκομμένη εξαίρεση. Θα πρέπει να προσέξετε ότι η εξαίρεση αντιμετωπίζεται είτε από το μπλοκ try / catch είτε από το ρίχνει λέξεις-κλειδιά διαφορετικά, θα οδηγήσει στο σφάλμα χρόνου μεταγλώττισης. Η μέθοδος ύπνου κρατά την κλειδαριά στο τρέχον αντικείμενο κατά την εκτέλεση και δεν επιτρέπει σε κανένα άλλο αντικείμενο να εκτελεστεί μέχρι να τελειώσει την εκτέλεσή του.

Ορισμός της μεθόδου αναμονής

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

 Περιμένετε(); περιμένετε (πολύ χιλιοστά του δευτερολέπτου). αναμονή (πολύ χιλιοστά του δευτερολέπτου, int nanosecond). 

Όπως και στις τρεις παραπάνω μορφές της μεθόδου αναμονής, η πρώτη μέθοδος δεν έχει χρονική παράμετρο, σημαίνει ότι η εκτέλεση της μεθόδου αναμονής θα συνεχιστεί μέχρι να μην χρησιμοποιηθεί η μέθοδος κοινοποίησης ή noAll notification. Οι υπόλοιπες δύο μέθοδοι έχουν παραμέτρους χρόνου. Έτσι θα εκτελεστούν μέχρι να λήξει ο χρόνος ή μέχρι να ειδοποιηθεί ή noitfyΌλες οι μέθοδοι είναι επικαλούμενοι νωρίτερα από το χρόνο που λήγει. Η μέθοδος αναμονής μπορεί να κάνει εξαιρέσεις. IllegalArgumentException, εάν το χρονικό όρισμα που έχει περάσει είναι αρνητικό. IllegalMonitorStateException, εάν το τρέχον νήμα δεν χρησιμοποιεί τον πόρο. InterruptedException, εάν διακοπεί η μέθοδος αναμονής.

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

  1. Το κύριο σημείο που διακρίνει τη μέθοδο ύπνου και αναμονής είναι ότι η μέθοδος ύπνου κρατά την κλειδαριά στο αντικείμενο έως ότου διακοπεί ή λήξει ο χρόνος του. Ωστόσο, η μέθοδος αναμονής απελευθερώνει την κλειδαριά στο αντικείμενο που την επικαλείται και δίνει σε άλλα αντικείμενα την ευκαιρία να εκτελέσει.
  2. Η μέθοδος ύπνου ορίζεται στην κλάση Thread ενώ η μέθοδος αναμονής ορίζεται στην κλάση Object .
  3. Η μέθοδος ύπνου δεν χρειάζεται να καλείται από συγχρονισμένο πλαίσιο. Αλλά η μέθοδος αναμονής πρέπει να καλείται από συγχρονισμένο.
  4. Η μέθοδος ύπνου ξυπνά όταν η ώρα της μεθόδου έχει λήξει ή διακόπτεται από το άλλο νήμα. Η μέθοδος αναμονής αφυπνίζεται
    όταν γίνεται επίκληση της μεθόδου κοινοποίησης ή κοινοποίησης όλων.
  5. Η μέθοδος ύπνου είναι στατική μέθοδος ενώ η μέθοδος αναμονής δεν είναι μια στατική μέθοδος.
  6. Η μέθοδος ύπνου εκτελείται στο τρέχον νήμα ενώ η μέθοδος αναμονής εκτελείται στο αντικείμενο που την επικαλείται.
  7. Η εξαίρεση που απορρίπτεται από τη μέθοδο ύπνου είναι ΔιακοπτόμενηΕξαίρεση ενώ οι εξαιρέσεις με την μέθοδο αναμονής είναι IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Συμπέρασμα:

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

Top