Sobes.tech
Middle+

Co je klíčové slovo volatile v Java a jak se používá?

sobes.tech AI

Odpověď od AI

volatile zajišťuje viditelnost změn proměnné pro všechny vlákna.

  • Záruka viditelnosti: Když jedno vlákno změní volatile proměnnou, ostatní vlákna garantovaně uvidí tuto změnu. Bez volatile mohou změny zůstat v cache vlákna, aniž by se synchronizovaly s hlavní pamětí.
  • Neatomické: volatile nezaručuje atomárnost operací. Operace jako inkrement (i++) nejsou atomické a mohou vést ke stavu závodu i s volatile.

Používá se pro:

  • Stavové vlajky: Když jedno vlákno nastaví vlajku, aby ostatním vlákům oznámilo nějaký stav.
  • Jednoduché operace čtení/zápisu: Když operace s proměnnou spočívají v jednorázovém zápisu jedním vláknem a vícenásobném čtení jinými.

Příklad použití s vlajkou:

// Příklad použití volatile pro ukončovací vlajku
public class VolatileExample {
    private volatile boolean terminated = false;

    public void start() {
        new Thread(() -> {
            while (!terminated) {
                // Práce vlákna
                System.out.println("Vlákno běží...");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
            System.out.println("Vlákno ukončeno.");
        }).start();
    }

    public void stop() {
        terminated = true; // Změna ve volatile proměnné
    }

    public static void main(String[] args) throws InterruptedException {
        VolatileExample example = new VolatileExample();
        example.start();
        Thread.sleep(500);
        example.stop();
    }
}