Как java AtomicReference работает под капотом
Как java AtomicReference работает под капотом? Я попытался Просмотреть код, но он основан на sun.разное.Небезопасно поэтому, вероятно, другой вопрос, как работает небезопасно?
2 ответа:
это специфично для текущей реализации и может изменяться, но не обязательно документы
Есть две операции. Одиночное чтение / запись или атомарные свопы.Как java AtomicReference работает под капотом
- однократное чтение / запись являются простыми
Атомарные свопы нуждаются в инструкциях уровня процессора. Наиболее распространенными реализациями являются Compare and Swap (CAS), найденные на sparc-TSO, x86, ia64 и LL / SC найдено на arm, ppc и alpha. Я уверен, что есть еще что-то, что я упускаю, но это дает вам представление о масштабах.volatile
загрузками или хранилищами.Другой вопрос, как работает небезопасный?
Небезопасные работы с помощью собственных методов, использующих инструкции процессора.
Источники:
AtomicReference имеет два поля: -
* значение, которое является эталоном * valueOffset, который является позицией значения в байтах от "this", то есть атомарной связью
В compareAndSwap(ожидается, обновленная), объект при этом-расположение + valueOffset сравниваются через == семантика с "ожидается", а если ==, то обновляться с "обновленными".
Это единственная аппаратная инструкция, и таким образом гарантируется обновление или сбой с ложным возвратом атомарно.
Чтение небезопасного исходного кода из openJDK.