This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
java:synchronized_methods_blocks [2015/04/18 16:08] gthanos [Συγχρονισμένα Βlocks] |
java:synchronized_methods_blocks [2016/02/26 11:15] (current) |
||
---|---|---|---|
Line 47: | Line 47: | ||
Στο παρακάτω παράδειγμα έχουμε δύο συγχρονισμένα blocκ μέσα σε δύο μη συγχρονισμένες μεθόδους. Η διαφορά είναι ότι η κλάση ορίζει δύο επιπλέον αντικείμενα μόνο και μόνο για να χρησιμοποιήσει τα //monitor locks// των αντικειμένων αυτών | Στο παρακάτω παράδειγμα έχουμε δύο συγχρονισμένα blocκ μέσα σε δύο μη συγχρονισμένες μεθόδους. Η διαφορά είναι ότι η κλάση ορίζει δύο επιπλέον αντικείμενα μόνο και μόνο για να χρησιμοποιήσει τα //monitor locks// των αντικειμένων αυτών | ||
- | <code java SycBlock.java> | + | <code java SyncBlock.java> |
public class SyncBlock { | public class SyncBlock { | ||
private long c1 = 0; | private long c1 = 0; | ||
Line 71: | Line 71: | ||
Αν και ένα νήμα δεν μπορεί να λάβει το //monitor lock// ενός αντικειμένου, όταν αυτό έχει καταληφθεί από άλλο αντικείμενο, το ίδιο thread μπορεί να λάβει το //monitor lock// του ιδίου αντικειμένου όσες φορές χρειαστεί αν υπάρχουν εμφωλευμένες (nested) κλήσεις συγχρονισμένων μεθόδων ή συγχρονισμένων blocks. Σε αυτές τις περιπτώσεις το monitor lock απελευθερώνεται μόνο όταν το νήμα βγει και από την τελευταία μέθοδο ή block στην οποία μπήκε πριν από κάθε άλλη κλήση συγχρονισμένης μεθόδου ή μπλοκ. | Αν και ένα νήμα δεν μπορεί να λάβει το //monitor lock// ενός αντικειμένου, όταν αυτό έχει καταληφθεί από άλλο αντικείμενο, το ίδιο thread μπορεί να λάβει το //monitor lock// του ιδίου αντικειμένου όσες φορές χρειαστεί αν υπάρχουν εμφωλευμένες (nested) κλήσεις συγχρονισμένων μεθόδων ή συγχρονισμένων blocks. Σε αυτές τις περιπτώσεις το monitor lock απελευθερώνεται μόνο όταν το νήμα βγει και από την τελευταία μέθοδο ή block στην οποία μπήκε πριν από κάθε άλλη κλήση συγχρονισμένης μεθόδου ή μπλοκ. | ||
</WRAP> | </WRAP> | ||
+ | |||
+ | Δείτε το παραπάνω παράδειγμα εμφωλευμένων κλήσεων συγχρονισμένων μεθόδων | ||
+ | |||
+ | <code java NestedSyncMethods.java> | ||
+ | public class NestedSyncMethods { | ||
+ | void synchronized outer() { | ||
+ | inner(); | ||
+ | } | ||
+ | | ||
+ | void synchronized inner() { | ||
+ | ... | ||
+ | } | ||
+ | } | ||
+ | </code> | ||