User Tools

Site Tools


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] – created gthanosjava:nested_lockeout [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
 ====== Αδιέξοδο λόγο χρήσης εμφωλευμένων συγχρονισμένων μεθόδων ή μπλοκ ====== ====== Αδιέξοδο λόγο χρήσης εμφωλευμένων συγχρονισμένων μεθόδων ή μπλοκ ======
  
-Το αδιέξοδο χρήσης εμφωλευμένων συγχρονισμένων μεθόδων ή μπλοκ είναι αντίστοιχο με το deadlock αν και ο λόγος για τον οποίο συμβαίνει είναι διαφορετικός. Δείτε το παρακάτω παράδειγμα "κλειδαριάς".+Το αδιέξοδο χρήσης εμφωλευμένων συγχρονισμένων μεθόδων ή μπλοκ είναι αντίστοιχο με το deadlock αν και ο λόγος για τον οποίο συμβαίνει είναι διαφορετικός. Δείτε το παρακάτω παράδειγμα μιας λάθος σχεδιασμένης "κλειδαριάς".
  
 <code java Lock.java> <code java Lock.java>
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: 2015/03/30 06:17 (external edit)