Sobes.tech
Junior — Middle

Ποια μέθοδοι μπορούν να διασφαλίσουν ασφαλή πρόσβαση σε ένα αντικείμενο ή στο πεδίο του από πολλαπλά νήματα ταυτόχρονα;

sobes.tech AI

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

Για να διασφαλίσετε ασφαλή πρόσβαση σε ένα αντικείμενο ή το πεδίο του από πολλαπλά νήματα στην Java, χρησιμοποιούνται διάφορες μέθοδοι συγχρονισμού:

  • Λέξη-κλειδί synchronized — μπορείτε να συγχρονίσετε μεθόδους ή μπλοκ κώδικα ώστε μόνο ένα νήμα να τα εκτελεί ταυτόχρονα.

  • Κλάσεις από το πακέτο java.util.concurrent, π.χ., ReentrantLock — ένα πιο ευέλικτο μηχανισμό κλειδώματος.

  • Πεδία Volatile — διασφαλίζουν την ορατότητα των αλλαγών στη μεταβλητή μεταξύ νημάτων, αλλά δεν διασφαλίζουν την ατομικότητα πολύπλοκων λειτουργιών.

  • Ατομικές κλάσεις (AtomicInteger, AtomicReference κ.ά.) — παρέχουν ατομικές λειτουργίες χωρίς κλειδώματα.

  • Αμετάβλητα αντικείμενα — αν ένα αντικείμενο είναι αμετάβλητο, είναι ασφαλές για πρόσβαση από πολλά νήματα χωρίς συγχρονισμό.

Παράδειγμα με synchronized:

public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

Αυτή η προσέγγιση διασφαλίζει ότι οι λειτουργίες πάνω στο count είναι ατομικές και ασφαλείς για νήματα.