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
volatilekintamąjį, kiti srautai tai garantuotai matys. Bevolatile, pakeitimai gali likti srauto talpykloje ir nesidalyti su pagrindine atmintimi. - Neatomariškumas:
volatilenesuteikia operacijų atomariškumo. Operacijos, kaip inkrementavimas (i++), nėra atomariškos ir gali sukelti lenktynių sąlygas net ir suvolatile.
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();
}
}