Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: volatile, atomicity

Является ли операция ++ атомарной для volatile переменной?

Вопрос проверяет понимание атомарности операций и различий между volatile и синхронизацией в многопоточном коде.

Короткий ответ

Нет, операция ++ не является атомарной, даже если переменная объявлена как volatile. volatile гарантирует видимость изменений между потоками, но не защищает составные операции. Инкремент состоит из нескольких шагов: чтение, увеличение и запись. Между этими шагами другой поток может вмешаться. Поэтому volatile не решает проблему гонок данных.

Длинный ответ

Определение

volatile гарантирует:

  • видимость изменений между потоками

  • запрет на переупорядочивание операций с этой переменной

Но volatile не гарантирует атомарность.

Почему ++ не атомарен

Операция counter++ фактически состоит из шагов:

  1. чтение значения из памяти

  2. увеличение значения

  3. запись нового значения обратно

volatile int counter = 0;
counter++;

Если два потока выполняют это одновременно:

  • оба читают одно и то же значение

  • оба увеличивают его

  • результат одного увеличения теряется

Что даёт volatile, а что нет

volatile:

  • гарантирует, что поток увидит актуальное значение

  • не предотвращает одновременную модификацию

Как сделать правильно

Для атомарного инкремента используют:

  • synchronized

  • AtomicInteger

  • Lock

AtomicInteger counter = new AtomicInteger();
counter.incrementAndGet();

Вывод

volatile — это про видимость, а не про атомарность. Для ++ в многопоточном коде он недостаточен.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Java

    Java

Ключевые слова

#volatile

#atomicity

Подпишись на Java Developer в телеграм