Sobes.tech
Middle+

Čo je kľúčové slovo volatile v Jave a ako sa používa?

sobes.tech AI

Odpoveď od AI

volatile zabezpečuje viditeľnosť zmien premennej vo všetkých vláknach.

  • Záruka viditeľnosti: Keď jedno vlákno zmení volatile premennú, ostatné vlákna garantovane uvidia túto zmenu. Bez volatile môžu zostať zmeny v cache vlákna, bez synchronizácie s hlavným pamäťou.
  • Neatomické: volatile nezaručuje atomickosť operácií. Operácie ako inkrement (i++) nie sú atomické a môžu viesť ku stavu súťažného boja aj s volatile.

Používa sa na:

  • Stavové vlajky: Keď jedno vlákno nastaví vlajku, aby informovalo iné vlákna o nejakom stave.
  • Jednoduché operácie čítania/zápisu: Keď operácie s premennou zahŕňajú jednorazový zápis jedným vláknom a viacnásobné čítanie inými.

Príklad použitia s vlajkou:

// Príklad použitia volatile pre ukončovaciu vlajku
public class VolatileExample {
    private volatile boolean terminated = false;

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

    public void stop() {
        terminated = true; // Zmena v volatile premennej
    }

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