2015-07-21 6 views
3

Как работает java AtomicReference под капотом? Я попытался просмотреть код, но основан на sun.misc.Unsafe, поэтому, возможно, еще один вопрос: как работает Unsafe?Как работает java AtomicReference под капотом

+3

Возможно, используя CAS на любом JVM-сообщении 2010 ... Но лучше всего здесь искать, читать, искать, читать, искать, читать ... (кстати: CAS == Сравнить и своп) – fge

+0

У небезопасных есть много 'родные' методы. Но да, я считаю, что короткий ответ будет CAS. –

+0

Чтобы полностью понять, вы захотите ознакомиться с [барьерами памяти] (https://www.kernel.org/doc/Documentation/memory-barriers.txt). –

ответ

3

Это относится только к текущей реализации и может изменяться, но не обязательно документы

Как ява AtomicReference работает под капотом

Есть две операции. Одиночные чтения/записи или атомные свопы.

  1. Одиночные чтения/записи простые volatile загружает или сохраняет.
  2. Атомные свопы требуют инструкций уровня процессора. Наиболее распространенными реализациями являются Compare and Swap (CAS), найденные на sparc-TSO, x86 и ia64 и LL/SC, найденные на руке, ppc и alpha. Я уверен, что меня больше нет, но это дает вам представление об объеме.

Другой вопрос: как работает небезопасное?

Небезопасные работы с использованием собственных методов с использованием инструкций процессора.

Источники:

http://gee.cs.oswego.edu/dl/jmm/cookbook.html

0

AtomicReference имеет два поля: -
* значение, которое является ссылка * valueOffset, что положение значения в байтах от 'этого', то есть AtomicReference
В compareAndSwap (ожидается, обновлено) объект в этом месте + значениеOffset сравнивается с использованием семантики == с «ожидаемым», а если ==, то обновляется с «обновленным».
Это отдельная аппаратная инструкция и, таким образом, гарантированно обновляется или завершается с ложным возвратом атомарно.
Прочтите небезопасный исходный код из openJDK.