java:thread_signalling

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
java:thread_signalling [2015/04/19 15:17]
gthanos [Συγχρονισμός Νημάτων]
java:thread_signalling [2015/04/19 15:25]
gthanos [Ξαφνικά ξυπνήματα (Spurious wake-ups)]
Line 123: Line 123:
 Εκτός της //​notify()//​ υπάρχει και η //​notifyAll()//​ που ξυπνάει όλα τα νήματα που περιμένουν στο συγκεκριμένο //monitor lock// σε αντίθεση με την notify() που ξυπνάει μόνο ένα νήμα. Όταν περισσότερα του ενός νήματα περιμένουν το ποιο νήμα θα ξυπνήσει η μέθοδος //​notify()//​ δεν ελέγχεται από εσάς. Είστε όμως σίγουροι ότι θα ξυπνήσει ένα νήμα. Εκτός της //​notify()//​ υπάρχει και η //​notifyAll()//​ που ξυπνάει όλα τα νήματα που περιμένουν στο συγκεκριμένο //monitor lock// σε αντίθεση με την notify() που ξυπνάει μόνο ένα νήμα. Όταν περισσότερα του ενός νήματα περιμένουν το ποιο νήμα θα ξυπνήσει η μέθοδος //​notify()//​ δεν ελέγχεται από εσάς. Είστε όμως σίγουροι ότι θα ξυπνήσει ένα νήμα.
  
-<​WRAP ​tip 80% round center>+<​WRAP ​important ​80% round center>
 Ο παραπάνω κώδικας δεν μπορεί να εξασφαλίσει τον συγχρονισμό αν αντικαταστήσουμε την notify() με την notifyAll(). Γιατί; Ο παραπάνω κώδικας δεν μπορεί να εξασφαλίσει τον συγχρονισμό αν αντικαταστήσουμε την notify() με την notifyAll(). Γιατί;
 </​WRAP>​ </​WRAP>​
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//.
java/thread_signalling.txt · Last modified: 2016/02/26 11:15 (external edit)