This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
java:thread_signalling [2015/04/19 15:28] gthanos [Ξαφνικά ξυπνήματα (Spurious wake-ups)] |
java:thread_signalling [2016/02/26 11:15] (current) |
||
---|---|---|---|
Line 169: | Line 169: | ||
</WRAP> | </WRAP> | ||
- | Παρατηρήστε ότι η κλάση MyWaitNotify2 υλοποιεί ένα | + | Παρατηρήστε ότι η κλάση **MyWaitNotify2** υλοποιεί ένα μία απλή κλειδαριά, όπου μόνο ένα νήμα μπορεί να πάρει την κλειδαριά, ενώ όλα τα υπόλοιπα νήματα περιμένουν. Μόλις ολοκληρώσει την επεξεργασία ελευθερώνει την κλειδαριά και ενημερώνει ένα από τα νήματα που περιμένουν να ξεκινήσει. Η παραπάνω κλάση θα μπορούσε να γραφεί και ως εξής: |
+ | <code java SimpleLock.java> | ||
+ | public class SimpleLock { | ||
+ | MonitorObject myMonitorObject = new MonitorObject(); | ||
+ | boolean wasSignalled = false; | ||
+ | |||
+ | public void lock(){ | ||
+ | synchronized(myMonitorObject){ | ||
+ | while(!wasSignalled){ | ||
+ | try{ | ||
+ | myMonitorObject.wait(); | ||
+ | } catch(InterruptedException e){...} | ||
+ | } | ||
+ | //clear signal and continue running. | ||
+ | wasSignalled = false; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public void unlock(){ | ||
+ | synchronized(myMonitorObject){ | ||
+ | wasSignalled = true; | ||
+ | myMonitorObject.notify(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> | ||