Sobes.tech
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 είναι συγχρονισμένες για να αποτρέψουν ταυτόχρονη πρόσβαση και συνθήκες αγώνα.