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 обеспечивает только видимость, но не защиту от гонок при изменении переменной.