Назад к вопросам
Middle
75
questionbank

Что произойдет, если применить ключевое слово volatile к переменной в Java?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

volatile гарантирует видимость обновлений переменной всеми потоками.

Применение volatile к переменной:

  • Гарантирует видимость: Запись в volatile переменную одним потоком становится видимой для всех других потоков, которые впоследствии читают эту переменную.
  • Запрещает переупорядочивание: JVM и процессоры могут переупорядочивать инструкции для оптимизации производительности. volatile запрещает переупорядочивание записи в volatile переменную с последующими доступами к другим переменным, а чтения из volatile переменной с предыдущими доступами к другим переменным.
  • Не гарантирует атомарность: volatile обеспечивает видимость, но не гарантирует, что составные операции (например, инкремент i++, который состоит из чтения, модификации и записи) будут атомарными. Для атомарных операций на примитивных типах часто используются классы из пакета java.util.concurrent.atomic.

Пример использования:

// Переменная для флага остановки потока
private volatile boolean stopped = false;

public void run() {
    while (!stopped) {
        // Выполнение работы
    }
}

public void stop() {
    stopped = true; // Изменение флага, видимое другим потоком
}