Это не будет точным ответом на вопрос:
Ни объяснение, ни намерение не ясны из документации.Если бы идея состояла в том, чтобы обойти глобальное упорядочение, то есть изменчивую запись в архитектурах, которые позволяют это [например, IBM Power или ARM], и просто выставить поведение CAS (LoadLinked / StoreCondition) БЕЗ ограждения, это было бы довольно удивительным усилием и источником путаницы.
sun.misc. У CAS Unsafe нет никаких спецификаций или гарантий упорядочения (известных как раньше), но java.util.atomic ... делает.Так что на более слабой модели java.util.atomic impl.в этом случае потребуются необходимые заборы для соответствия спецификации Java.
Предполагается, что классы Updater действительно не имеют заборов.Если они это сделают, volatile чтение поля (без использования get) должно вернуть значение обновления, т.е. ясно, что get()
не требуется.Так как не будет гарантий заказа, предыдущие магазины могут не распространяться (на слабых моделях).На x86 / Sparc TSO аппаратное обеспечение обеспечивает спецификацию Java.
Однако это также означает, что CAS можно переупорядочить с помощью следующих энергонезависимых операций чтения.Есть интересная заметка из java.util.concurrent.SynchronousQueue
очереди:
// Note: item and mode fields don't need to be volatile
// since they are always written before, and read after,
// other volatile/atomic operations.
Все упомянутые атомарные операции являются точно CAS AtomicReferenceFieldUpdater.Это может означать отсутствие или переписывание между обычными операциями чтения и записи и AtomicReferenceFieldUpdater.CAS, то есть ведет себя как энергозависимая запись.
s.item = null; // forget item
s.waiter = null; // forget thread
//....
while ((p = head) != null && p != past && p.isCancelled())
casHead(p, p.next);
Просто CAS, нет энергозависимых записей.
Учитывая указанное выше условие, я бы пришел к выводу, что AtomicXXXFieldUpdater предоставляет ту же семантику, что и их аналоги AtomicXXX.