Middle+
Wat is het sleutelwoord volatile in Java en hoe wordt het gebruikt?
sobes.tech AI
Antwoord van AI
volatile garandeert dat wijzigingen in een variabele zichtbaar zijn voor alle threads.
- Zichtbaarheidsgarantie: Wanneer één thread een
volatile-variabele wijzigt, garanderen andere threads dat ze deze wijziging zien. Zondervolatilekunnen wijzigingen in de cache van de thread blijven, zonder gesynchroniseerd te worden met het hoofdgeheugen. - Niet-atomair:
volatilegarandeert niet de atomairheid van operaties. Operaties zoals incrementeer (i++) zijn niet atomair en kunnen racecondities veroorzaken, zelfs metvolatile.
Gebruikt voor:
- Statusvlaggen: Wanneer één thread een vlag instelt om andere threads te informeren over een bepaalde status.
- Eenvoudige lees/schrijf-operaties: Wanneer operaties op een variabele bestaan uit één enkele write door één thread en meerdere reads door anderen.
Voorbeeld van gebruik met een vlag:
// Voorbeeld van het gebruik van volatile voor een beëindigingsvlag
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Thread-werk
System.out.println("Thread is aan het werken...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Thread beëindigd.");
}).start();
}
public void stop() {
terminated = true; // Verandering in de volatile-variabele
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}