Sobes.tech
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 volatile muutujat, teised vood garanteeritult näevad seda muutust. Ilma volatile-ita võivad muudatused jääda voogu vahemällu ja mitte sünkroniseeruda põhimuistiga.
  • Aatomilisus puudub: volatile ei taga operatsioonide aatomilisust. Operatsioonid nagu inkrement (i++) ei ole aatomilised ja võivad põhjustada võistlusolukordi isegi volatile kasutamisel.

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();
    }
}