Sobes.tech
Middle+

Kas yra volatile raktažodis Java ir kaip jis naudojamas?

sobes.tech AI

Atsakymas iš AI

volatile užtikrina pokyčių matomumą visų srautų atžvilgiu.

  • Matomumo garantija: Kai vienas srautas keičia volatile kintamąjį, kiti srautai tai garantuotai matys. Be volatile, pakeitimai gali likti srauto talpykloje ir nesidalyti su pagrindine atmintimi.
  • Neatomariškumas: volatile nesuteikia operacijų atomariškumo. Operacijos, kaip inkrementavimas (i++), nėra atomariškos ir gali sukelti lenktynių sąlygas net ir su volatile.

Naudojama:

  • Būsenos žymekliams: Kai vienas srautas nustato žymeklį, kad praneštų kitiems srautams apie tam tikrą būseną.
  • Vienkartinėms rašymo/skaitymo operacijoms: Kai operacijos su kintamuoju apima vienkartinį rašymą vienu srautu ir daugybinį skaitymą kitais.

Pavyzdys su žymekliu:

// Pavyzdys, kaip naudoti volatile žymeklį užbaigimui
public class VolatileExample {
    private volatile boolean terminated = false;

    public void start() {
        new Thread(() -> {
            while (!terminated) {
                // Srauto darbas
                System.out.println("Srautas veikia...");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
            System.out.println("Srautas baigtas.");
        }).start();
    }

    public void stop() {
        terminated = true; // Keičiamas volatile kintamasis
    }

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