Middle+
Ce este cuvântul cheie volatile în Java și cum se folosește?
sobes.tech AI
Răspuns de la AI
volatile asigură vizibilitatea modificărilor unei variabile pentru toate firele.
- Garanția de vizibilitate: Când un fir modifică o variabilă
volatile, alte fire garantează că vor vedea această modificare. Fărăvolatile, modificările pot rămâne în cache-ul firului, fără a fi sincronizate cu memoria principală. - Nu atomic:
volatilenu garantează atomicitatea operațiilor. Operații precum incrementarea (i++) nu sunt atomice și pot duce la condiții de cursă chiar și cuvolatile.
Este utilizat pentru:
- Flag-uri de stare: Când un fir setează un flag pentru a informa alte fire despre o anumită stare.
- Operații simple de citire/scriere: Când operațiile asupra variabilei constau într-o singură scriere de către un fir și multiple citiri de către altele.
Exemplu de utilizare cu un flag:
// Exemplu de utilizare a volatile pentru un flag de terminare
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Lucru în fir
System.out.println("Firul rulează...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Firul s-a terminat.");
}).start();
}
public void stop() {
terminated = true; // Schimbare în variabila volatile
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}