Sobes.tech
Back to questions
Junior — Middle
61

Возможна ли ситуация, когда при параллельных потоках изменения переменной, объявленной как volatile, возникает ошибка или некорректное поведение?

Companies where asked
СБЕР КорпусСБЕР Корпус

Answer from AI

sobes.tech AI

Переменная, объявленная как volatile в Java, гарантирует видимость изменений между потоками, но не обеспечивает атомарность операций. Это значит, что если несколько потоков одновременно изменяют переменную, например, выполняют инкремент (x++), то возможны ошибки из-за того, что операция не является атомарной.

Пример проблемы:

volatile int counter = 0;

// В нескольких потоках выполняется:
counter++;

Здесь counter++ состоит из нескольких шагов: чтение, увеличение, запись. Между этими шагами другой поток может вмешаться, что приведёт к потере обновления.

Для корректной работы в таких случаях используют атомарные классы из java.util.concurrent.atomic или синхронизацию:

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

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