Sobes.tech
Senior
51

Pri akých typoch údajov možno pozorovať neatomárnosť pri použití volatile?

Spoločnosti boli požiadané
СБЕРСБЕР

Odpoveď od 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.