This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | Next revision Both sides next revision | ||
java:thread_signalling [2015/04/19 15:22] gthanos [Συγχρονισμός με χρήση wait(), notify(), notifyAll()] |
java:thread_signalling [2015/04/19 15:25] gthanos [Ξαφνικά ξυπνήματα (Spurious wake-ups)] |
||
---|---|---|---|
Line 164: | Line 164: | ||
</code> | </code> | ||
- | <WRAP tip> | + | <WRAP info 80% center round> |
Το παραπάνω σχήμα δουλεύει επίσης πολύ καλά εάν πολλαπλά νήματα περιμένουν σε ένα monitor lock. | Το παραπάνω σχήμα δουλεύει επίσης πολύ καλά εάν πολλαπλά νήματα περιμένουν σε ένα monitor lock. | ||
Αν τα νήματα αυτά ξυπνούν μέσα από μία κλήση της μεθόδου //notifyAll()//, τότε μέσα από τον παραπάνω κώδικα μόνο ένα από τα νήματα θα λάβει το monitor lock (το πρώτο που ξύπνησε και έλαβε το lock του αντικειμένου myMonitorObject). Τα υπόλοιπα, όταν με την σειρά τους θα λάβουν το lock, θα ελέγξουν την τιμή της μεταβλητής //wasSignalled// και θα πάνε πάλι για ύπνο εφόσον την βρουν ίση με //false//. | Αν τα νήματα αυτά ξυπνούν μέσα από μία κλήση της μεθόδου //notifyAll()//, τότε μέσα από τον παραπάνω κώδικα μόνο ένα από τα νήματα θα λάβει το monitor lock (το πρώτο που ξύπνησε και έλαβε το lock του αντικειμένου myMonitorObject). Τα υπόλοιπα, όταν με την σειρά τους θα λάβουν το lock, θα ελέγξουν την τιμή της μεταβλητής //wasSignalled// και θα πάνε πάλι για ύπνο εφόσον την βρουν ίση με //false//. |