Sobes.tech
Middle+

Java'da volatile kalit so'zi nima va uni qanday ishlatish mumkin?

sobes.tech AI

AIdan javob

volatile barcha oqimlar uchun o'zgaruvchining o'zgarishlarini ko'rinishini ta'minlaydi.

  • Ko'rinishni ta'minlash kafolati: Bir oqim volatile o'zgaruvchini o'zgartirganda, boshqa oqimlar bu o'zgarishni ko'rishlari kafolatlanadi. volatile bo'lmagan holda, o'zgarishlar oqimning kechki xotirasida qolishi mumkin va asosiy xotira bilan sinxronlashtirilmaydi.
  • Atomik emas: volatile operatsiyalarni atomikligini kafolatlamaydi. Inkrement (i++) kabi operatsiyalar atomik emas va volatile bilan ham raqobat sharoitlariga olib kelishi mumkin.

Qo'llaniladi:

  • Holat bayroqlari: Bir oqim bayroqni o'rnatganda, boshqa oqimlarga holat haqida xabar berish uchun.
  • Oddiy o'qish/yazish operatsiyalari: O'zgaruvchiga faqat bitta yozuv amalga oshiriladigan va boshqa oqimlar tomonidan ko'p marta o'qiladigan operatsiyalar uchun.

Bayroq bilan foydalanish misoli:

// Yakunlash uchun `volatile` bayrog'idan foydalanish misoli
public class VolatileExample {
    private volatile boolean terminated = false;

    public void start() {
        new Thread(() -> {
            while (!terminated) {
                // Threadning ishlashi
                System.out.println("Thread ishlamoqda...");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
            System.out.println("Thread yakunlandi.");
        }).start();
    }

    public void stop() {
        terminated = true; // `volatile` o'zgaruvchining o'zgarishi
    }

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