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
volatilepromenljivu, druge niti garantovano će videti tu promenu. Bezvolatile, promene mogu ostati u keš memoriji niti, bez sinhronizacije sa glavnom memorijom. - Neatomarnost:
volatilene garantuje atomarnost operacija. Operacije poput inkrementa (i++) nisu atomarne i mogu dovesti do uslova trke čak i savolatile.
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();
}
}