Differences
This shows you the differences between two versions of the page.
|
Next revision
|
Previous revision
Next revision
Both sides next revision
|
java:nested_lockeout [2015/03/30 07:17] gthanos created |
java:nested_lockeout [2015/04/19 16:15] gthanos |
| } | } |
| </code> | </code> |
| |
| Notice how the lock() method first synchronizes on "this", then synchronizes on the monitorObject member. If isLocked is false there is no problem. The thread does not call monitorObject.wait(). If isLocked is true however, the thread calling lock() is parked waiting in the monitorObject.wait() call. | |
| |
| Παρατηρήστε ότι η μέθοδος lock() πρώτα λαμβάνει το monitor lock του αντικειμένου "this" και στη συνέχεια λαμβάνει το monitor lock του αντικειμένου //monitorObject//. Εάν η κλειδαριά δεν είναι κλειδωμένη δηλ (isLocked!=true) τότε το νήμα δεν μπαίνει μέσα στο while() και δεν λαμβάνει και το 2ο lock. Αν όμως η κλειδαριά είναι κλειδωμένη τότε το νήμα λαμβάνει και το 2ο lock και κοιμάται μέσα στην μέθοδο //wait()// περιμένοντας κάποιο άλλο νήμα να το ξυπνήσει. | Παρατηρήστε ότι η μέθοδος lock() πρώτα λαμβάνει το monitor lock του αντικειμένου "this" και στη συνέχεια λαμβάνει το monitor lock του αντικειμένου //monitorObject//. Εάν η κλειδαριά δεν είναι κλειδωμένη δηλ (isLocked!=true) τότε το νήμα δεν μπαίνει μέσα στο while() και δεν λαμβάνει και το 2ο lock. Αν όμως η κλειδαριά είναι κλειδωμένη τότε το νήμα λαμβάνει και το 2ο lock και κοιμάται μέσα στην μέθοδο //wait()// περιμένοντας κάποιο άλλο νήμα να το ξυπνήσει. |
| } | } |
| } | } |
| <code> | </code> |
| |
| Παρακάτω δίνεται ένα πιο ρεαλιστικό παράδειγμα με βάση την κλάση FairLock. | Παρακάτω δίνεται ένα πιο ρεαλιστικό παράδειγμα με βάση την κλάση FairLock. |