java:nested_lockeout

Differences

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

Link to this comparison view

Next revision
Previous revision
java:nested_lockeout [2015/03/30 07:17]
gthanos created
java:nested_lockeout [2016/02/26 11:15] (current)
Line 29: Line 29:
 } }
 </​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()// περιμένοντας κάποιο άλλο νήμα να το ξυπνήσει.
Line 42: Line 40:
       }       }
     }     }
-<​code>​+</code>
  
 Παρακάτω δίνεται ένα πιο ρεαλιστικό παράδειγμα με βάση την κλάση FairLock. Παρακάτω δίνεται ένα πιο ρεαλιστικό παράδειγμα με βάση την κλάση FairLock.
java/nested_lockeout.1427699854.txt.gz · Last modified: 2016/02/26 11:15 (external edit)