Sobes.tech
Junior — Middle

Πώς λειτουργεί ο μηχανισμός synchronized όταν χρησιμοποιείται με μια στατική λειτουργία στο πλαίσιο ενός monitor;

sobes.tech AI

Απάντηση από AI

Όταν μια μέθοδος δηλώνεται ως synchronized static στη Java, ο παρακολούθηση (lock) λαμβάνεται σε επίπεδο κλάσης, όχι σε επίπεδο αντικειμένου. Αυτό σημαίνει ότι, κατά την κλήση μιας τέτοιας μεθόδου, το νήμα μπλοκάρει το παρακολούθηση της κλάσης (αντικείμενο Class), και κανένα άλλο νήμα δεν θα μπορεί να εκτελέσει ταυτόχρονα άλλες στατικές συγχρονισμένες μεθόδους αυτής της ίδιας κλάσης.

Παράδειγμα:

public class Example {
    public static synchronized void staticSyncMethod() {
        // μπλοκάρει το παρακολούθηση της κλάσης Example.class
        // κρίσιμη ενότητα
    }
}

Έτσι, το synchronized σε μια στατική μέθοδο διασφαλίζει αμοιβαία αποκλεισμό σε επίπεδο ολόκληρης της κλάσης, όχι συγκεκριμένου αντικειμένου. Αυτό είναι χρήσιμο όταν χρειάζεται να συγχρονίσεις την πρόσβαση σε στατικές πόρους ή μεταβλητές της κλάσης.