Middle+
Mis on volatile märksõna Java-s ja kuidas seda kasutatakse?
sobes.tech AI
Vastus AI-lt
volatile tagab muutuste nähtavuse kõigi voogude jaoks.
- Nähtavuse garantii: Kui üks voog muudab
volatilemuutujat, teised vood garanteeritult näevad seda muutust. Ilmavolatile-ita võivad muudatused jääda voogu vahemällu ja mitte sünkroniseeruda põhimuistiga. - Aatomilisus puudub:
volatileei taga operatsioonide aatomilisust. Operatsioonid nagu inkrement (i++) ei ole aatomilised ja võivad põhjustada võistlusolukordi isegivolatilekasutamisel.
Kasutus:
- Seisundi lipud: Kui üks voog seab lipu, et teavitada teisi vooge mingist seisundist.
- Ühekordsed kirjutamis-/lugemisoperatsioonid: Kui operatsioonid kätkevad ühe kirjutamise ühe vooga ja mitmekordse lugemise teiste poolt.
Näide lipuga:
// Näide, kuidas kasutada volatile lipu lõpetamiseks
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Voo töö
System.out.println("Vool töötab...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Vool lõpetatud.");
}).start();
}
public void stop() {
terminated = true; // Muudatus volatile muutujas
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}