This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
java:synchronized_methods_blocks [2015/03/24 16:29] gthanos [Συγχρονισμένα Βlocks] |
java:synchronized_methods_blocks [2015/04/18 16:08] gthanos [Συγχρονισμένα Βlocks] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Συγχρονισμένες μέθοδοι και συγχρονισμένα blocks ====== | ====== Συγχρονισμένες μέθοδοι και συγχρονισμένα blocks ====== | ||
- | Η Java παρέχει δύο βασικούς τρόπους συγχρονισμού προκειμένου να αποφεύγονται τα προβλήματα συγχρονισμού που παρουσιάστηκαν προηγούμενα τις συγχρονισμένες μεθόδους και τα συγχρονισμένα blocks. | + | Η Java παρέχει δύο βασικούς τρόπους συγχρονισμού προκειμένου να αποφεύγονται τα προβλήματα συγχρονισμού που παρουσιάστηκαν προηγούμενα **α)** τις συγχρονισμένες μεθόδους και **β)** τα συγχρονισμένα blocks. |
- | Η διαδικασίες συγχρονισμού που περιγράφονται παρακάτω βασίζονται σε έναν εσωτερικό μηχανισμό που διαθέτουν όλα τα αντικείμενα στην Java, το λεγόμενο intrinsic lock ή monitor lock. (Το API της Java αναφέρεται συχνά στον μηχανισμό αυτό ως //monitor//). Όταν ένα νήμα θέλει να εκτελέσει τη συγχρονισμένη μέθοδο ενός αντικειμένου θα πρέπει να λάβει το //monitor lock// για το αντικείμενο αυτό. Αντίστοιχα, όταν το ίδιο νήμα θα βγει από την συχρονισμένη μέθοδο του αντικειμένου θα ελευθερώσει το //monitor lock// για το αντικείμενο. Όταν ένα νήμα έχει το //monitor lock// για ένα αντικείμενο, κανένα άλλο νήμα δεν μπορεί να λάβει ταυτόχρονα αυτό το lock. Μόνο το υφιστάμενο αντικείμενο μπορεί να αφήσει το lock εξερχόμενο από την συγχρονισμένη μέθοδο ή το συγχρονισμένο block. | + | Η διαδικασίες συγχρονισμού που περιγράφονται παρακάτω βασίζονται σε έναν εσωτερικό μηχανισμό που διαθέτουν όλα τα αντικείμενα στην Java, το λεγόμενο intrinsic lock ή monitor lock. (Το API της Java αναφέρεται συχνά στον μηχανισμό αυτό ως //monitor//). Όταν ένα νήμα θέλει να εκτελέσει τη συγχρονισμένη μέθοδο ενός αντικειμένου θα πρέπει να λάβει το //monitor lock// για το αντικείμενο αυτό. Αντίστοιχα, όταν το ίδιο νήμα θα βγει από την συγχρονισμένη μέθοδο του αντικειμένου θα ελευθερώσει το //monitor lock// για το αντικείμενο. Όταν ένα νήμα έχει το //monitor lock// για ένα αντικείμενο, κανένα άλλο νήμα δεν μπορεί να λάβει ταυτόχρονα αυτό το lock. Μόνο το υφιστάμενο αντικείμενο μπορεί να αφήσει το lock εξερχόμενο από την συγχρονισμένη μέθοδο ή το συγχρονισμένο block. |
===== Συγχρονισμένες μέθοδοι ===== | ===== Συγχρονισμένες μέθοδοι ===== | ||
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> | ||