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 11:10] – [Συγχρονισμός μέσω διαμοιραζόμενων αντικειμένων και διαρκούς επανάληψης] 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()+" | ||
} | } | ||
- | Thread.sleep(10); | + | |
+ | // Thread.sleep(10); | ||
lock.lock(); | lock.lock(); | ||
for(int i=0; i<10; i++) { | for(int i=0; i<10; i++) { | ||
Line 107: | 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 200: | Line 187: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | |Προηγούμενο: | ||
java/thread_signalling.1520593856.txt.gz · Last modified: 2018/03/09 11:10 by gthanos