Sobes.tech
Middle+

Какво е ключовата дума volatile в Java и как се използва?

sobes.tech AI

Отговор от AI

volatile гарантира видимостта на промените в променлива за всички нишки.

  • Гаранция за видимост: Когато една нишка променя volatile променлива, други нишки гарантирано ще видят тази промяна. Без volatile промените могат да останат в кеша на нишката, без да се синхронизират с основната памет.
  • Не атомарна: volatile не гарантира атомарността на операциите. Операции като инкремент (i++) не са атомарни и могат да доведат до състезателни условия дори с volatile.

Използва се за:

  • Флагове за състояние: Когато една нишка задава флаг, за да информира други нишки за някакво състояние.
  • Прости операции за четене/писане: Когато операциите с променливата включват еднократно писане от една нишка и многократно четене от други.

Пример за използване с флаг:

// Пример за използване на volatile за флаг за приключване
public class VolatileExample {
    private volatile boolean terminated = false;

    public void start() {
        new Thread(() -> {
            while (!terminated) {
                // Работа на нишката
                System.out.println("Нишката работи...");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
            System.out.println("Нишката приключи.");
        }).start();
    }

    public void stop() {
        terminated = true; // промяна в volatile променливата
    }

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