Sobes.tech
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. Zonder volatile kunnen wijzigingen in de cache van de thread blijven, zonder gesynchroniseerd te worden met het hoofdgeheugen.
  • Niet-atomair: volatile garandeert niet de atomairheid van operaties. Operaties zoals incrementeer (i++) zijn niet atomair en kunnen racecondities veroorzaken, zelfs met volatile.

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();
    }
}