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:06] gthanos [Συγχρονισμένες μέθοδοι και συγχρονισμένα blocks]  | 
                
                    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 69: | Line 69: | ||
| <WRAP round center tip> | <WRAP round center tip> | ||
| - | Αν και ένα νήμα δεν μπορεί να λάβει το //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> | ||