Sobes.tech
Junior — Middle

Σε ποια στοιχεία μπορεί κανείς να καλέσει με ασφάλεια τη μέθοδο wait() σε ένα συγχρονισμένο πλαίσιο;

sobes.tech AI

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

Η μέθοδος wait() στην Java μπορεί να καλείται μόνο σε αντικείμενα των οποίων ο παρακολούθηση (κλείδωμα παρακολούθησης) έχει αποκτηθεί από το τρέχον νήμα, δηλαδή μέσα σε ένα συγχρονισμένο μπλοκ ή μέθοδο που είναι συγχρονισμένη σε αυτό το αντικείμενο. Αυτό σημαίνει ότι είναι ασφαλές να καλείτε wait() μόνο σε αντικείμενα στα οποία διατηρείτε το παρακολούθηση, για παράδειγμα:

synchronized (obj) {
    obj.wait(); // ασφαλές
}

Αν καλέσετε wait() εκτός ενός συγχρονισμένου πλαισίου σε αυτό το αντικείμενο, θα προκληθεί μια εξαίρεση IllegalMonitorStateException. Συνεπώς, μπορείτε να καλείτε wait() μόνο σε αντικείμενα στα οποία το τρέχον νήμα διατηρεί το παρακολούθηση (δηλαδή, μέσα σε synchronized(obj) ή μια συγχρονισμένη μέθοδο σε αυτό το αντικείμενο).