Middle+
Τι είναι η λέξη-κλειδί volatile στη Java και πώς χρησιμοποιείται;
sobes.tech AI
Απάντηση από AI
Το volatile διασφαλίζει την ορατότητα των αλλαγών μιας μεταβλητής σε όλα τα νήματα.
- Εγγύηση ορατότητας: Όταν ένα νήμα αλλάζει μια
volatileμεταβλητή, άλλα νήματα εγγυώνται ότι θα δουν αυτή την αλλαγή. Χωρίςvolatile, οι αλλαγές μπορεί να παραμείνουν στην cache του νήματος, χωρίς να συγχρονίζονται με τη βασική μνήμη. - Μη ατομική: Το
volatileδεν εγγυάται την ατομικότητα των λειτουργιών. Λειτουργίες όπως η αύξηση (i++) δεν είναι ατομικές και μπορεί να οδηγήσουν σε συνθήκες αγώνα ακόμα και μεvolatile.
Χρησιμοποιείται για:
- Σημαίες κατάστασης: Όταν ένα νήμα ορίζει μια σημαία για να ενημερώσει άλλα νήματα για μια κατάσταση.
- Απλές λειτουργίες ανάγνωσης/εγγραφής: Όταν οι λειτουργίες με μια μεταβλητή περιλαμβάνουν μια μόνο εγγραφή από ένα νήμα και πολλαπλές αναγνώσεις από άλλα.
Παράδειγμα χρήσης με σημαία:
// Παράδειγμα χρήσης του volatile για σημαία τερματισμού
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Εργασία νήματος
System.out.println("Το νήμα λειτουργεί...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Το νήμα τερματίστηκε.");
}).start();
}
public void stop() {
terminated = true; // Αλλαγή στη μεταβλητή volatile
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}