Sobes.tech
Middle+

Šta je ključna reč volatile u Javi i kako se koristi?

sobes.tech АИ

Одговор од АИ

volatile garantuje vidljivost promena promenljive za sve niti.

  • Garancija vidljivosti: Kada jedna nit menja volatile promenljivu, druge niti garantovano će videti tu promenu. Bez volatile, promene mogu ostati u keš memoriji niti, bez sinhronizacije sa glavnom memorijom.
  • Neatomarnost: volatile ne garantuje atomarnost operacija. Operacije poput inkrementa (i++) nisu atomarne i mogu dovesti do uslova trke čak i sa volatile.

Koristi se za:

  • Zastavice stanja: Kada jedna nit postavi zastavicu da obavesti druge niti o nekom stanju.
  • Jednostavne operacije čitanja/pisanja: Kada operacije sa promenljivom uključuju jednokratni zapis od strane jedne niti i višestruko čitanje od strane drugih.

Primer korišćenja sa zastavicom:

// Primer korišćenja volatile za zastavicu završetka
public class VolatileExample {
    private volatile boolean terminated = false;

    public void start() {
        new Thread(() -> {
            while (!terminated) {
                // Rad niti
                System.out.println("Niti radi...");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
            System.out.println("Niti završena.");
        }).start();
    }

    public void stop() {
        terminated = true; // Promena volatile promenljive
    }

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