User Tools

Site Tools


java:thread_signalling

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
java:thread_signalling [2018/03/09 11:43] – [Συγχρονισμός με χρήση wait(), notify(), notifyAll()] gthanosjava:thread_signalling [2018/03/09 12:02] (current) – old revision restored (2018/03/09 13:23) gthanos
Line 106: Line 106:
  
 Η μέθοδος //notify()// ξυπνάει ένα νήμα που περιμένει στο συγκεκριμένο //monitor lock//. Όπως βλέπετε οι μέθοδοι //wait()// και //notify()// καλούνται μέσα σε ένα συγχρονισμένο block του οποίου το //monitor lock// αφορά το αντικείμενο από το οποίο καλούνται οι //wait()// και //notify()//. Το παραπάνω σχήμα είναι υποχρεωτικό, δηλαδή (ισχύουν και τα δύο παρακάτω): Η μέθοδος //notify()// ξυπνάει ένα νήμα που περιμένει στο συγκεκριμένο //monitor lock//. Όπως βλέπετε οι μέθοδοι //wait()// και //notify()// καλούνται μέσα σε ένα συγχρονισμένο block του οποίου το //monitor lock// αφορά το αντικείμενο από το οποίο καλούνται οι //wait()// και //notify()//. Το παραπάνω σχήμα είναι υποχρεωτικό, δηλαδή (ισχύουν και τα δύο παρακάτω):
-  οι //wait()// και //notify()// θα πρέπει να κληθούν μέσα σε ένα συγχρονισμένο block ή μία συγχρονισμένη μέθοδο.  +  οι //wait()// και //notify()// θα πρέπει να κληθούν μέσα σε ένα συγχρονισμένο block ή μία συγχρονισμένη μέθοδο.  
-  Κατά την κλήση των //wait()/notify()// μπορούμε να καλέσουμε τις wait()/notify() μόνο για το αντικείμενο του οποίου έχουμε αποκτήσει το //monitor lock// +  Κατά την κλήση των //wait()/notify()// μπορούμε να καλέσουμε τις wait()/notify() μόνο για το αντικείμενο του οποίου έχουμε αποκτήσει το //monitor lock//. Εάν δεν ισχύει αυτό τότε λαμβάνουμε ένα [[http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalMonitorStateException.html|IllegalMonitorStateException]].
-  * Εάν δεν ισχύουν τα δύο παραπάνω δεν έχουμε καμία εγγύηση για το σωστό συγχρονισμό των νημάτων.+
  
 Εκτός από τη μέθοδο //notify()// που ξυπνάει ένα νήμα από όσα περιμένουν υπάρχει και η //notifyAll()// που ξυπνάει όλα τα νήματα που περιμένουν για το συγκεκριμένο //monitor lock//. Όταν περισσότερα του ενός νήματα περιμένουν, το ποιο νήμα από όλα θα ξυπνήσει η μέθοδος //notify()// δεν ελέγχεται από εσάς. Είστε όμως βέβαιοι ότι θα ξυπνήσει ένα νήμα. Εκτός από τη μέθοδο //notify()// που ξυπνάει ένα νήμα από όσα περιμένουν υπάρχει και η //notifyAll()// που ξυπνάει όλα τα νήματα που περιμένουν για το συγκεκριμένο //monitor lock//. Όταν περισσότερα του ενός νήματα περιμένουν, το ποιο νήμα από όλα θα ξυπνήσει η μέθοδος //notify()// δεν ελέγχεται από εσάς. Είστε όμως βέβαιοι ότι θα ξυπνήσει ένα νήμα.
java/thread_signalling.1520595813.txt.gz · Last modified: 2018/03/09 11:43 (external edit)