Junior — Middle
Ποια μέθοδοι μπορούν να χρησιμοποιηθούν για την αποτροπή καταστάσεων αγώνα σε ένα πολυνηματικό περιβάλλον;
sobes.tech AI
Απάντηση από AI
Για την αποτροπή συνθήκης αγώνα (race condition) σε περιβάλλον πολλαπλών νημάτων, χρησιμοποιούνται οι ακόλουθες μέθοδοι:
- Συγχρονισμός (synchronized) — κλείδωμα κρίσιμων τμημάτων κώδικα, ώστε μόνο ένα νήμα να μπορεί να τα εκτελεί ταυτόχρονα.
- Χρήση κλάσεων από java.util.concurrent — π.χ.,
ReentrantLock,AtomicInteger,ConcurrentHashMap. - Αποφυγή κοινής κατάστασης — σχεδιασμός δομών δεδομένων ασφαλών για νήματα ή χρήση αμετάβλητων αντικειμένων.
- Χρήση volatile — για διασφάλιση ορατότητας των αλλαγών στις μεταβλητές μεταξύ νημάτων.
Παράδειγμα με synchronized:
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
Εδώ, οι μέθοδοι increment και getCount είναι συγχρονισμένες για να αποτρέψουν ταυτόχρονη πρόσβαση και συνθήκες αγώνα.