Sobes.tech
Senior
55

Bij welke gegevenstypen kan niet-atomariteit worden waargenomen bij gebruik van volatile?

Bedrijven waar gevraagd werd
СБЕРСБЕР

Antwoord van AI

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.