Назад к вопросам
СБЕР
Senior
4
На каких типах данных можно наблюдать неатомарность при использовании volatile?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Java ключевое слово volatile гарантирует видимость изменений переменной между потоками, но не атомарность операций. Неатомарность при использовании volatile наблюдается на типах данных, размер которых превышает 32 бита, например, long и double на 32-битных JVM.
На 64-битных JVM чтение и запись long и double обычно атомарны, но спецификация Java не гарантирует этого для всех платформ. Поэтому, если переменная volatile типа long или double обновляется не атомарно (например, инкрементом), возможны состояния гонки.
Пример неатомарной операции с volatile long:
volatile long counter;
// Инкремент неатомарен, т.к. включает чтение, изменение и запись
counter++;
Для атомарных операций с такими типами лучше использовать классы из java.util.concurrent.atomic, например, AtomicLong.