java:thread_signalling
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| java:thread_signalling [2018/03/09 08:01] – [Ξαφνικά ξυπνήματα (Spurious wake-ups)] gthanos | java:thread_signalling [2018/03/09 12:02] (current) – old revision restored (2018/03/09 13:23) gthanos | ||
|---|---|---|---|
| Line 53: | Line 53: | ||
| System.out.println(Thread.currentThread().getName()+" | System.out.println(Thread.currentThread().getName()+" | ||
| } | } | ||
| + | // Uncomment the following line and see threads running concurrently. | ||
| + | // Thread.sleep(10); | ||
| lock.lock(); | lock.lock(); | ||
| for(int i=0; i<10; i++) { | for(int i=0; i<10; i++) { | ||
| Line 80: | Line 82: | ||
| Object myMonitorObject = new Object(); | Object myMonitorObject = new Object(); | ||
| - | boolean wasSignalled = false; | + | boolean wasSignalled = true; |
| public void doWait(){ | public void doWait(){ | ||
| Line 106: | Line 108: | ||
| - οι //wait()// και // | - οι //wait()// και // | ||
| - Κατά την κλήση των // | - Κατά την κλήση των // | ||
| - | |||
| - | <code java> | ||
| - | public void doWait(){ | ||
| - | synchronized(myMonitorObject){ | ||
| - | if(!wasSignalled){ | ||
| - | try{ | ||
| - | myMonitorObject.wait(); | ||
| - | } catch(InterruptedException e){...} | ||
| - | } | ||
| - | //clear signal and continue running. | ||
| - | wasSignalled = false; | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| Εκτός από τη μέθοδο // | Εκτός από τη μέθοδο // | ||
| <WRAP important 80% round center> | <WRAP important 80% round center> | ||
| - | Ο παραπάνω κώδικας δεν μπορεί να εξασφαλίσει τον συγχρονισμό αν αντικαταστήσουμε την notify() με την notifyAll(). Γιατί; | + | Ο παραπάνω κώδικας δεν μπορεί να εξασφαλίσει τον συγχρονισμό αν αντικαταστήσουμε την |
| </ | </ | ||
| - | Ας δούμε τώρα πως υλοποιείται ο παραπάνω μηχανισμός συγχρονισμού. Όταν ένα νήμα περιμένει μέσω της wait() ελευθερώνει παράλληλα το //monitor lock// που έχει λάβει για το αντικείμενο // | + | Ας δούμε τώρα πως υλοποιείται ο παραπάνω μηχανισμός συγχρονισμού. Όταν ένα νήμα περιμένει μέσω της |
| <WRAP tip 80% round center> | <WRAP tip 80% round center> | ||
| Line 199: | Line 187: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | |Προηγούμενο: | ||
java/thread_signalling.1520582482.txt.gz · Last modified: 2018/03/09 08:01 by gthanos
