Συγκριτικό διάγραμμα
Βάση σύγκρισης | ύπνος | Περιμένετε |
---|---|---|
Βασικός | Η μέθοδος Sleep δεν απελευθερώνει την κλειδαριά σε ένα αντικείμενο μέχρι να διακοπεί. | Μέθοδος αναμονής απελευθερώνει την κλειδαριά στο αντικείμενο για να επιτρέψει σε άλλα αντικείμενα να εκτελέσουν μέχρι να ειδοποιήσουν ή να ειδοποιήσουνΌλες οι μέθοδοι κλήθηκαν. |
Τάξη | Η μέθοδος Sleep ορίζεται στην κλάση Thread. | Η μέθοδος αναμονής ορίζεται στην κλάση Object. |
Συγχρονισμένο | Η μέθοδος Sleep δεν χρειάζεται να καλείται στο συγχρονισμένο πλαίσιο. | Η μέθοδος αναμονής πρέπει να καλείται στο συγχρονισμένο πλαίσιο. |
Ολοκλήρωση | Η εκτέλεση της μεθόδου ύπνου ολοκληρώνεται όταν διακόπτεται ένα νήμα ή έχει λήξει η ώρα του ύπνου. | Η αναμονή εκτέλεσης μεθόδου ολοκληρώνεται όταν η μέθοδος κοινοποίησης () ή notificationAll () διακόπτει τη διαδικασία. |
Στατικός | Η μέθοδος ύπνου είναι μια στατική μέθοδος. | Η μέθοδος περιμένετε δεν είναι στατική, γι 'αυτό χρειάζεται αντικείμενο για να την επικαλεστεί. |
Εκτέλεση | Η μέθοδος ύπνου εκτελείται στο τρέχον νήμα. | Η μέθοδος αναμονής εκτελείται στο αντικείμενο. |
Εξαίρεση | ΔιακοπήΕξαίρεση | Παράνομηαπελευθέρωσηαπόκρυψη, παράνομημεταχείρισηΣύνδεση, ΔιακοπήΕξέλιξη. |
Ορισμός της μεθόδου ύπνου
Η μέθοδος ύπνου είναι η στατική μέθοδος της κλάσης Thread . Η μέθοδος ύπνου χρησιμοποιείται όταν ένα νήμα δεν θέλει να εκτελέσει οποιαδήποτε εργασία για ένα συγκεκριμένο χρονικό διάστημα. Η μέθοδος ύπνου ολοκληρώνει την εκτέλεση είτε όταν λήξει ο χρόνος της μεθόδου είτε διακόπτεται από κάποιο άλλο νήμα κατά την εκτέλεση. Μετά την ολοκλήρωση της μεθόδου ύπνου, το νήμα αποκτά και πάλι την κατάσταση λειτουργίας του. Υπάρχουν δύο από τη μέθοδο ύπνου όπως φαίνεται παρακάτω.
δημόσιος στατικός κενός κενός ύπνος (μακρύς χιλιοστά του δευτερολέπτου). δημόσιος στατικός κενός ύπνος (μεγάλα χιλιοστά του δευτερολέπτου και int nanosecond).
Στις παραπάνω δύο μορφές, μπορείτε να παρατηρήσετε ότι ο χρόνος αναφέρεται τόσο στη μορφή της μεθόδου ύπνου. Αυτό οφείλεται στο γεγονός ότι ένα νήμα πάνε πάντα για έναν συγκεκριμένο χρόνο που αναφέρεται στην παράμετρο. Η μέθοδος ύπνου μπορεί να διακοπεί από οποιοδήποτε άλλο νήμα κατά τη διάρκεια της εκτέλεσης. Ως εκ τούτου, μπορεί να ρίξει το Διακεκομμένη εξαίρεση. Θα πρέπει να προσέξετε ότι η εξαίρεση αντιμετωπίζεται είτε από το μπλοκ try / catch είτε από το ρίχνει λέξεις-κλειδιά διαφορετικά, θα οδηγήσει στο σφάλμα χρόνου μεταγλώττισης. Η μέθοδος ύπνου κρατά την κλειδαριά στο τρέχον αντικείμενο κατά την εκτέλεση και δεν επιτρέπει σε κανένα άλλο αντικείμενο να εκτελεστεί μέχρι να τελειώσει την εκτέλεσή του.
Ορισμός της μεθόδου αναμονής
Περιμένετε είναι η μέθοδος που ορίζεται στην κλάση Object . Η μέθοδος αναμονής χρησιμοποιείται όταν πολλές εργασίες (θέματα) αγωνίζονται για τον ίδιο πόρο μία κάθε φορά. Η μέθοδος αναμονής, όταν την ενεργοποιήσετε, απελευθερώνει την κλειδαριά στο αντικείμενο που έχει καλέσει τη μέθοδο αναμονής. Και δίνεται η ευκαιρία σε άλλο αντικείμενο να εκτελεστεί μέχρι να γίνει επίκληση μιας μεθόδου κοινοποίησης η οποία θα συνεχίσει ξανά την κλειδαριά στο αντικείμενο που απελευθερώνεται από τη μέθοδο αναμονής. Η μέθοδος αναμονής έχει την ακόλουθη μορφή.
Περιμένετε(); περιμένετε (πολύ χιλιοστά του δευτερολέπτου). αναμονή (πολύ χιλιοστά του δευτερολέπτου, int nanosecond).
Όπως και στις τρεις παραπάνω μορφές της μεθόδου αναμονής, η πρώτη μέθοδος δεν έχει χρονική παράμετρο, σημαίνει ότι η εκτέλεση της μεθόδου αναμονής θα συνεχιστεί μέχρι να μην χρησιμοποιηθεί η μέθοδος κοινοποίησης ή noAll notification. Οι υπόλοιπες δύο μέθοδοι έχουν παραμέτρους χρόνου. Έτσι θα εκτελεστούν μέχρι να λήξει ο χρόνος ή μέχρι να ειδοποιηθεί ή noitfyΌλες οι μέθοδοι είναι επικαλούμενοι νωρίτερα από το χρόνο που λήγει. Η μέθοδος αναμονής μπορεί να κάνει εξαιρέσεις. IllegalArgumentException, εάν το χρονικό όρισμα που έχει περάσει είναι αρνητικό. IllegalMonitorStateException, εάν το τρέχον νήμα δεν χρησιμοποιεί τον πόρο. InterruptedException, εάν διακοπεί η μέθοδος αναμονής.
Βασικές διαφορές μεταξύ της μεθόδου ύπνου και αναμονής στη Java
- Το κύριο σημείο που διακρίνει τη μέθοδο ύπνου και αναμονής είναι ότι η μέθοδος ύπνου κρατά την κλειδαριά στο αντικείμενο έως ότου διακοπεί ή λήξει ο χρόνος του. Ωστόσο, η μέθοδος αναμονής απελευθερώνει την κλειδαριά στο αντικείμενο που την επικαλείται και δίνει σε άλλα αντικείμενα την ευκαιρία να εκτελέσει.
- Η μέθοδος ύπνου ορίζεται στην κλάση Thread ενώ η μέθοδος αναμονής ορίζεται στην κλάση Object .
- Η μέθοδος ύπνου δεν χρειάζεται να καλείται από συγχρονισμένο πλαίσιο. Αλλά η μέθοδος αναμονής πρέπει να καλείται από συγχρονισμένο.
- Η μέθοδος ύπνου ξυπνά όταν η ώρα της μεθόδου έχει λήξει ή διακόπτεται από το άλλο νήμα. Η μέθοδος αναμονής αφυπνίζεται
όταν γίνεται επίκληση της μεθόδου κοινοποίησης ή κοινοποίησης όλων. - Η μέθοδος ύπνου είναι στατική μέθοδος ενώ η μέθοδος αναμονής δεν είναι μια στατική μέθοδος.
- Η μέθοδος ύπνου εκτελείται στο τρέχον νήμα ενώ η μέθοδος αναμονής εκτελείται στο αντικείμενο που την επικαλείται.
- Η εξαίρεση που απορρίπτεται από τη μέθοδο ύπνου είναι ΔιακοπτόμενηΕξαίρεση ενώ οι εξαιρέσεις με την μέθοδο αναμονής είναι IllegalArgumentException, IllegalMonitorStateException, InterruptedException .
Συμπέρασμα:
Όταν πολλαπλά νήματα θέλουν να χρησιμοποιήσουν τον ίδιο πόρο ένα προς ένα, τότε πρέπει να χρησιμοποιηθεί η μέθοδος αναμονής. Όταν ένα νήμα δεν θέλει να εκτελέσει οποιαδήποτε εργασία, πρέπει να χρησιμοποιηθεί η μέθοδος ύπνου.