Spec-Zone.ru › OpenJDK 24

Класс VarHandle

java.lang.Object
java.lang.invoke.VarHandle
Все реализованные интерфейсы:
Constable
public abstract sealed class VarHandle extends Object implements Constable
A VarHandle — это динамически сильно типизированная ссылка на переменную или на параметрически определённую группу переменных, включая статические поля, нестатические поля, элементы массива или компоненты вне-кучной структуры данных. Доступ к таким переменным поддерживается в различных режимах доступа, включая обычный чтение/запись, чтение/запись с поддержкой volatile и сравнение-с-обменом.

VarHandle неизменяемы и не имеют видимого состояния. VarHandle нельзя подклассировать пользователем.

VarHandle имеет:

  • тип variable type T, тип каждой переменной, на которую ссылается данный VarHandle; и
  • список coordinate types CT1, CT2, ..., CTn, типы координатных выражений, которые совместно определяют местоположение переменной, на которую ссылается этот VarHandle.
Типы переменных и координат могут быть примитивными или ссылочными и представлены Class объектами. Список типов координат может быть пустым.

Методы-фабрики, которые производят или lookup экземпляры VarHandle, документируют поддерживаемые типы переменных и список типов координат.

Каждый режим доступа связан с одним методом режима доступа, полиморфным по сигнатуре методом, имеющим название, соответствующее режиму доступа. При вызове метода режима доступа на экземпляре VarHandle начальными аргументами вызова являются координатные выражения, которые точно указывают, в каком объекте должна производиться обращение к переменной. Конечные аргументы вызова представляют значения, важные для режима доступа. Например, различные режимы доступа сравнения-с-обменом или сравнения-с-обменом требуют двух конечных аргументов для ожидаемого значения переменной и нового значения.

Арность и типы аргументов вызова метода режима доступа не проверяются статически. Вместо этого каждый метод режима доступа указывает access mode type, представленный экземпляром MethodType, который служит своего рода сигнатурой метода для динамической проверки аргументов. Тип режима доступа задаёт формальные типы параметров в терминах типов координат экземпляра VarHandle и типов значений, важных для режима доступа. Тип режима доступа также задаёт тип возвращаемого значения, часто в терминах типа переменной экземпляра VarHandle. При вызове метода режима доступа на экземпляре VarHandle символическое описание типа в месте вызова, временные типы аргументов вызова и временной тип возвращаемого значения должны совпадать с типами, указанными в типе режима доступа. Если соответствие не соблюдено, будет брошено исключение во время выполнения. Например, метод режима доступа compareAndSet(java.lang.Object...) указывает, что если его получатель — это экземпляр VarHandle с типами координат CT1, ..., CTn и типом переменной T, то его тип режима доступа — (CT1 c1, ..., CTn cn, T expectedValue, T newValue)boolean. Предположим, что экземпляр VarHandle может обращаться к элементам массива, и что его типы координат — String[] и int, а тип переменной — String. Тип режима доступа для compareAndSet в этом экземпляре VarHandle будет (String[] c1, int c2, String expectedValue, String newValue)boolean. Такой экземпляр VarHandle может быть получен методом array factory method и обращаться к элементам массива следующим образом:

 
 String[] sa = ...
 VarHandle avh = MethodHandles.arrayElementVarHandle(String[].class);
 boolean r = avh.compareAndSet(sa, 10, "expected", "new");
 

Режим доступа управляет атомарностью и свойствами согласованности. Простые чтение (get) и запись (set) доступа гарантируют побитовую атомарность только для ссылок и для примитивных значений не более 32 бит, и не накладывают никаких наблюдаемых ограничений порядка с точки зрения других потоков, кроме исполняющего потока. Непрозрачные операции являются побитово атомными и согласованно упорядоченными по отношению к обращениям к той же переменной. В дополнение к соблюдению свойств непрозрачности, Acquire-чтение и последующие обращения упорядочены после соответствующих Release-записей и предыдущих обращений. В дополнение к соблюдению свойств Acquire и Release, все Volatile операции полностью упорядочены друг относительно друга.

Режимы доступа группируются в следующие категории:

  • режимы доступа для чтения, которые получают значение переменной с учётом указанных эффектов упорядочения памяти. Множество соответствующих методов режима доступа в этой группе включает методы get, getVolatile, getAcquire, getOpaque.
  • режимы доступа для записи, которые устанавливают значение переменной с учётом указанных эффектов упорядочения памяти. Множество соответствующих методов режима доступа в этой группе включает методы set, setVolatile, setRelease, setOpaque.
  • атомарные режимы доступа для обновления, которые, например, атомарно сравнивают и устанавливают значение переменной с учётом указанных эффектов упорядочения памяти. Множество соответствующих методов режима доступа в этой группе включает методы compareAndSet, weakCompareAndSetPlain, weakCompareAndSet, weakCompareAndSetAcquire, weakCompareAndSetRelease, compareAndExchangeAcquire, compareAndExchange, compareAndExchangeRelease, getAndSet, getAndSetAcquire, getAndSetRelease.
  • численные атомарные режимы доступа для обновления, которые, например, атомарно получают и устанавливают с прибавлением значение переменной с учётом указанных эффектов упорядочения памяти. Множество соответствующих методов режима доступа в этой группе включает методы getAndAdd, getAndAddAcquire, getAndAddRelease,
  • побитовые атомарные режимы доступа для обновления, которые, например, атомарно получают и побитово ИЛИ значение переменной с учётом указанных эффектов упорядочения памяти. Множество соответствующих методов режима доступа в этой группе включает методы getAndBitwiseOr, getAndBitwiseOrAcquire, getAndBitwiseOrRelease, getAndBitwiseAnd, getAndBitwiseAndAcquire, getAndBitwiseAndRelease, getAndBitwiseXor, getAndBitwiseXorAcquire, getAndBitwiseXorRelease.

Методы-фабрики, которые производят или lookup экземпляры VarHandle, документируют набор поддерживаемых режимов доступа, который также может включать документирование ограничений, основанных на типе переменной и является ли переменная только для чтения. Если режим доступа не поддерживается, соответствующий метод режима доступа при вызове бросит UnsupportedOperationException. Методы-фабрики должны документировать любые дополнительные не объявленные исключения, которые могут быть брошены методами режима доступа. Метод get режима доступа поддерживается для всех экземпляров VarHandle и соответствующий метод никогда не бросает UnsupportedOperationException. Если VarHandle ссылается на переменную только для чтения (например, final поле), то режимы доступа для записи, атомарного обновления, числового атомарного обновления и побитового атомарного обновления не поддерживаются, и соответствующие методы бросают UnsupportedOperationException. Режимы доступа чтения/записи (если поддерживаются), за исключением get и set, обеспечивают атомарный доступ для типов ссылок и всех примитивных типов. Если в документации метода-фабрики не указано иное, режимы доступа get и set (если поддерживаются) обеспечивают атомарный доступ для ссылочных типов и всех примитивных типов, за исключением long и double на 32-битных платформах.

Режимы доступа переопределяют любые эффекты упорядочения памяти, указанные в месте объявления переменной. Например, VarHandle, обращающийся к полю с помощью режима доступа get, будет обращаться к полю, как это указано режимом доступа, даже если это поле объявлено volatile. При выполнении смешанного доступа необходимо проявлять особую осторожность, так как Java Memory Model может допускать неожиданные результаты.

В дополнение к поддержке доступа к переменным в различных режимах доступа, также предоставляется набор статических методов, называемых методами заграждения памяти, для тонкого управления упорядочением памяти. Спецификация языка Java допускает другим потокам наблюдать операции так, как будто они выполнялись в порядке, отличном от очевидного порядка исходного кода программы, в зависимости от ограничений, например, возникающих от использования блокировок, volatile полей или VarHandle. Статические методы fullFence, acquireFence, releaseFence, loadLoadFence и storeStoreFence также могут быть использованы для наложения ограничений. Их спецификации, как и в случае с определёнными режимами доступа, сформулированы в терминах отсутствия «переупорядочений» — наблюдаемых эффектов упорядочения, которые в противном случае могли бы произойти, если бы заграждение не было присутствующим. Более точная формулировка спецификации методов режима доступа и методов заграждения памяти может сопровождать будущие обновления спецификации языка Java.

Компиляция вызова методов режима доступа

Вызов Java-метода, имеющего режим доступа, может вызывать VarHandle из исходного кода Java. С точки зрения исходного кода, эти методы могут принимать любые аргументы, и их полиморфный результат (если он выражен) может быть преобразован к любому типу возвращаемого значения. Формально это достигается путем предоставления методам режима доступа переменной арности Object аргументов и Object типов возвращаемых значений (если тип возвращаемого значения полиморфен), но у них есть дополнительное свойство, называемое полиморфизмом сигнатуры, которое связывает эту свободу вызова непосредственно со стеком выполнения JVM.

Как обычно для виртуальных методов, вызовы на уровне исходного кода к методам режима доступа компилируются в инструкцию invokevirtual. Более необычно, компилятор должен записывать фактические типы аргументов и не может выполнять преобразования вызовов методов над аргументами. Вместо этого он должен генерировать инструкции для их помещения в стек в соответствии с их собственными необработанными типами. Объект VarHandle сам будет помещен в стек перед аргументами. Затем компилятор генерирует инструкцию invokevirtual, которая вызывает метод режима доступа с символическим описателем типа, описывающим типы аргументов и возвращаемого значения.

Для выдачи полного символического описателя типа компилятор также должен определить тип возвращаемого значения (если он полиморфен). Это основано на приведении типа в выражении вызова метода, если оно есть, или же Object, если вызов является выражением, или же void, если вызов является оператором. Приведение может быть к примитивному типу (но не void).

В качестве частного случая, неприведённому null аргументу присваивается символический описатель типа java.lang.Void. Неопределённость с типом Void не имеет последствий, так как нет ссылок типа Void, кроме нулевой ссылки.

Вызов методов режима доступа

В первый раз при выполнении инструкции invokevirtual она связывается путём символического разрешения имён в инструкции и проверки того, что вызов метода статически законен. Это также относится к вызовам методов режима доступа. В этом случае символический описатель типа, выдаваемый компилятором, проверяется на корректность синтаксиса, и содержащиеся в нём имена разрешаются. Таким образом, инструкция invokevirtual, вызывающая метод режима доступа, всегда будет связана, если символический описатель типа имеет правильный синтаксис и типы существуют.

Когда после связывания выполняется invokevirtual, получающий тип VarHandle сначала проверяется JVM, чтобы убедиться, что он соответствует символическому описателю типа. Если соответствие типа не удаётся, это означает, что метод режима доступа, который вызывает вызывающий объект, не присутствует на индивидуальном VarHandle, к которому осуществляется вызов.

Вызов метода режима доступа по умолчанию ведёт себя так, как если бы вызов MethodHandle.invoke(java.lang.Object...), где получающий метод handle принимает экземпляр VarHandle в качестве ведущего аргумента. Более конкретно, следующее, где {access-mode} соответствует имени метода режима доступа:

 
 VarHandle vh = ..
 R r = (R) vh.{access-mode}(p1, p2, ..., pN);
 
ведет себя так, как если бы:
 
 VarHandle vh = ..
 VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
 MethodHandle mh = MethodHandles.varHandleExactInvoker(
                       am,
                       vh.accessModeType(am));

 R r = (R) mh.invoke(vh, p1, p2, ..., pN)
 
(при этом методы режимов доступа не объявляют о возможности бросить Throwable). Это эквивалентно:
 
 MethodHandle mh = MethodHandles.lookup().findVirtual(
                       VarHandle.class,
                       "{access-mode}",
                       MethodType.methodType(R, p1, p2, ..., pN));

 R r = (R) mh.invokeExact(vh, p1, p2, ..., pN)
 
, где требуемый тип метода — это символический описатель типа, и выполняется MethodHandle.invokeExact(java.lang.Object...), так как до вызова целевого объекта обработчик будет применять необходимые преобразования ссылок и упаковывать, распаковывать или расширять примитивные значения, как если бы это делалось с помощью asType (см. также MethodHandles.varHandleInvoker(java.lang.invoke.VarHandle.AccessMode, java.lang.invoke.MethodType)). Более кратко, такое поведение эквивалентно:
 
 VarHandle vh = ..
 VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
 MethodHandle mh = vh.toMethodHandle(am);

 R r = (R) mh.invoke(p1, p2, ..., pN)
 
, где в этом случае метод handle привязан к экземпляру VarHandle.

Поведение вызова VarHandle можно настроить (см. withInvokeExactBehavior()) таким образом, что вызов метода режима доступа ведёт себя так, как если бы вызов MethodHandle.invokeExact(java.lang.Object...), где получающий метод handle принимает экземпляр VarHandle в качестве ведущего аргумента. Более конкретно, следующее, где {access-mode} соответствует имени метода режима доступа:

 
 VarHandle vh = ..
 R r = (R) vh.{access-mode}(p1, p2, ..., pN);
 
ведет себя так, как если бы:
 
 VarHandle vh = ..
 VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
 MethodHandle mh = MethodHandles.varHandleExactInvoker(
                       am,
                       vh.accessModeType(am));

 R r = (R) mh.invokeExact(vh, p1, p2, ..., pN)
 
(при этом методы режимов доступа не объявляют о возможности бросить Throwable). Более кратко, такое поведение эквивалентно:
 
 VarHandle vh = ..
 VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
 MethodHandle mh = vh.toMethodHandle(am);

 R r = (R) mh.invokeExact(p1, p2, ..., pN)
 
, где в этом случае метод handle привязан к экземпляру VarHandle.

Проверка вызова

В типичных программах соответствие типа режима доступа VarHandle обычно выполняется успешно. Но если соответствие не выполняется, JVM выбросит WrongMethodTypeException.

Таким образом, несовпадение типа режима доступа, которое может проявляться как ошибка связывания в статически типизированной программе, может проявляться как динамическая WrongMethodTypeException в программе, использующей VarHandle.

Поскольку типы режимов доступа VarHandle содержат «живые» Class объекты, соответствие типа метода учитывает как имена типов, так и загрузчики классов. Таким образом, даже если VarHandle VH создан в одном загрузчике классов L1 и используется в другом L2, вызовы методов режима доступа VarHandle являются типобезопасными, потому что символический описатель типа вызывающего объекта, как разрешённый в L2, сопоставляется со символическим описателем типа исходного метода вызываемого объекта, как разрешённым в L1. Разрешение в L1 происходит, когда VH создаётся и его типы доступа назначаются, в то время как разрешение в L2 происходит, когда инструкция invokevirtual связывается.

Помимо проверок описателей типов, возможность VarHandles получать доступ к своим переменным не ограничена. Если VarHandle сформирован на непубличной переменной классом, имеющим доступ к этой переменной, полученный VarHandle можно использовать в любом месте любым вызывающим объектом, который получает ссылку на него.

В отличие от Core Reflection API, где проверка доступа выполняется каждый раз при вызове рефлексивного метода, проверка доступа VarHandle выполняется при создании VarHandle. Таким образом, VarHandles к непубличным переменным или переменным в непубличных классах, как правило, следует хранить в секрете. Их не следует передавать недоверенному коду, если их использование недоверенным кодом не будет безопасно.

Создание VarHandle

Код Java может создать VarHandle, который напрямую получает доступ к любому полю, доступному для этого кода. Это делается через рефлексивный API на основе возможностей, называемый MethodHandles.Lookup. Например, VarHandle для нестатического поля можно получить из Lookup.findVarHandle. Также есть метод преобразования из объектов Core Reflection API, Lookup.unreflectVarHandle.

Доступ к защищённым членам поля ограничен только получателями из того же класса или одного из его подклассов, а сам класс также должен быть подклассом (или братом по пакету) определяющего класс защищённого члена. Если VarHandle ссылается на защищённое нестатическое поле класса-объявителя за пределами текущего пакета, аргумент получателя будет сужен до типа класса, выполняющего доступ.

Взаимодействие между VarHandles и Core Reflection API

Используя фабричные методы в API Lookup, любое поле, представленное объектом Core Reflection API, можно преобразовать в поведенчески эквивалентный VarHandle. Например, рефлексивное Field можно преобразовать в VarHandle с помощью Lookup.unreflectVarHandle. Полученные VarHandles, как правило, обеспечивают более прямой и эффективный доступ к соответствующим полям.

В качестве специального случая, когда Core Reflection API используется для просмотра методов режима доступа с полиморфизмом сигнатуры в этом классе, они отображаются как обычные методы без полиморфизма. Их рефлексивное отображение, как просматривается с помощью Class.getDeclaredMethod, не зависит от их специального статуса в этом API. Например, Method.getModifiers сообщит ровно те биты модификаторов, которые требуются для любого аналогично объявленного метода, включая в данном случае native и varargs биты.

Как и для любого отражённого метода, эти методы (при отражении) можно вызывать напрямую через java.lang.reflect.Method.invoke, через JNI или косвенно через Lookup.unreflect. Однако такие рефлексивные вызовы не приводят к вызовам методов режима доступа. Если такой вызов получит необходимый аргумент (один, типа Object[]), он проигнорирует аргумент и выбросит исключение UnsupportedOperationException.

Поскольку инструкции invokevirtual могут напрямую вызывать методы режима доступа VarHandle с любым символическим описателем типа, этот рефлексивный вид конфликтует с обычным представлением этих методов через байткоды. Таким образом, эти нативные методы, когда рефлексивно просматриваются с помощью Class.getDeclaredMethod, могут рассматриваться только как заглушки.

Для получения метода-обработчика для определённого типа режима доступа используйте MethodHandles.varHandleExactInvoker(java.lang.invoke.VarHandle.AccessMode, java.lang.invoke.MethodType) или MethodHandles.varHandleInvoker(java.lang.invoke.VarHandle.AccessMode, java.lang.invoke.MethodType). API Lookup.findVirtual также может вернуть метод-обработчик для вызова метода режима доступа для любого заданного типа режима доступа и эквивалентен по поведению MethodHandles.varHandleInvoker(java.lang.invoke.VarHandle.AccessMode, java.lang.invoke.MethodType).

Взаимодействие между VarHandles и Java-обобщениями

END_OF_DOCUMENT_MARKER
Для переменной, такой как поле, объявленной с помощью Java-обобщений, можно получить VarHandle. Как и в случае с API Core Reflection, тип переменной VarHandle будет построен из стирания типа уровня исходного кода. При вызове метода режима доступа VarHandle типы его аргументов или тип возвращаемого значения могут быть обобщенными типами или экземплярами типов. Если это произойдёт, компилятор заменит эти типы их стиранием при построении символического описания типа для invokevirtual инструкции.
Since:
9
See Also:
  • MethodHandle
  • MethodHandles
  • MethodType

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static enum  VarHandle.AccessMode
Набор режимов доступа, определяющих, как переменная, на которую ссылается VarHandle, доступна.
static final class  VarHandle.VarHandleDesc
Номинальное описание для константы VarHandle.

Краткое описание методов

Модификатор и тип Метод Описание
final MethodType accessModeType(VarHandle.AccessMode accessMode)
Получает тип режима доступа для этого VarHandle и заданного режима доступа.
static void acquireFence()
Обеспечивает, чтобы загрузки перед ограждением не были переупорядочены с загрузками и сохранениями после ограждения.
final Object compareAndExchange(Object... args)
Атомарно устанавливает значение переменной в newValue с семантикой памяти setVolatile(java.lang.Object...), если текущее значение переменной, именуемое значением-свидетелем, == expectedValue, доступ к которому осуществляется с семантикой памяти getVolatile(java.lang.Object...).
final Object compareAndExchangeAcquire(Object... args)
Атомарно устанавливает значение переменной в newValue с семантикой памяти set(java.lang.Object...), если текущее значение переменной, именуемое значением-свидетелем, == expectedValue, доступ к которому осуществляется с семантикой памяти getAcquire(java.lang.Object...).
final Object compareAndExchangeRelease(Object... args)
Атомарно устанавливает значение переменной в newValue с семантикой памяти setRelease(java.lang.Object...), если текущее значение переменной, именуемое значением-свидетелем, == expectedValue, доступ к которому осуществляется с семантикой памяти get(java.lang.Object...).
final boolean compareAndSet(Object... args)
Атомарно устанавливает значение переменной в newValue с семантикой памяти setVolatile(java.lang.Object...), если текущее значение переменной, именуемое значением-свидетелем, == expectedValue, доступ к которому осуществляется с семантикой памяти getVolatile(java.lang.Object...).
List<Class<?>> coordinateTypes()
Возвращает типы координат для этого VarHandle.
Optional<VarHandle.VarHandleDesc> describeConstable()
Возвращает номинальный дескриптор для этого экземпляра, если он может быть создан, или пустой Optional, если он не может быть создан.
static void fullFence()
Обеспечивает, чтобы загрузки и сохранения перед ограждением не были переупорядочены с загрузками и сохранениями после ограждения.
final Object get(Object... args)
Возвращает значение переменной с семантикой памяти чтения, как если бы переменная была объявлена не-volatile.
final Object getAcquire(Object... args)
Возвращает значение переменной и гарантирует, что последующие загрузки и сохранения не будут переупорядочены перед этим доступом.
final Object getAndAdd(Object... args)
Атомарно добавляет value к текущему значению переменной с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getVolatile(java.lang.Object...).
final Object getAndAddAcquire(Object... args)
Атомарно добавляет value к текущему значению переменной с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getAcquire(java.lang.Object...).
final Object getAndAddRelease(Object... args)
Атомарно добавляет value к текущему значению переменной с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти get(java.lang.Object...).
final Object getAndBitwiseAnd(Object... args)
Атомарно устанавливает значение переменной в результат побитового И между текущим значением переменной и mask с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getVolatile(java.lang.Object...).
final Object getAndBitwiseAndAcquire(Object... args)
Атомарно устанавливает значение переменной в результат побитового И между текущим значением переменной и mask с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getAcquire(java.lang.Object...).
final Object getAndBitwiseAndRelease(Object... args)
Атомарно устанавливает значение переменной в результат побитового И между текущим значением переменной и mask с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти get(java.lang.Object...).
final Object getAndBitwiseOr(Object... args)
Атомарно устанавливает значение переменной в результат побитового ИЛИ между текущим значением переменной и mask с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getVolatile(java.lang.Object...).
final Object getAndBitwiseOrAcquire(Object... args)
Атомарно устанавливает значение переменной в результат побитового ИЛИ между текущим значением переменной и mask с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getAcquire(java.lang.Object...).
final Object getAndBitwiseOrRelease(Object... args)
Атомарно устанавливает значение переменной в результат побитового ИЛИ между текущим значением переменной и mask с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти get(java.lang.Object...).
final Object getAndBitwiseXor(Object... args)
Атомарно устанавливает значение переменной в результат побитового XOR между текущим значением переменной и mask с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getVolatile(java.lang.Object...).
final Object getAndBitwiseXorAcquire(Object... args)
Атомарно устанавливает значение переменной в результат побитового XOR между текущим значением переменной и mask с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getAcquire(java.lang.Object...).
final Object getAndBitwiseXorRelease(Object... args)
Атомарно устанавливает значение переменной в результат побитового XOR между текущим значением переменной и mask с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти get(java.lang.Object...).
final Object getAndSet(Object... args)
Атомарно устанавливает значение переменной в newValue с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getVolatile(java.lang.Object...).
final Object getAndSetAcquire(Object... args)
Атомарно устанавливает значение переменной в newValue с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти getAcquire(java.lang.Object...).
final Object getAndSetRelease(Object... args)
Атомарно устанавливает значение переменной в newValue с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, доступ к которому осуществляется с семантикой памяти get(java.lang.Object...).
final Object getOpaque(Object... args)
Возвращает значение переменной, доступ к которой осуществляется в порядке программы, но без гарантии эффектов упорядочения памяти по отношению к другим потокам.
final Object getVolatile(Object... args)
Возвращает значение переменной, с семантикой памяти чтения, как если бы переменная была объявлена volatile.
boolean hasInvokeExactBehavior()
Возвращает true, если у этого VarHandle есть поведение вызова с точным значением.
boolean isAccessModeSupported(VarHandle.AccessMode accessMode)
Возвращает true, если заданный режим доступа поддерживается, в противном случае false.
static void loadLoadFence()
Обеспечивает, что загрузки до барьера не будут переупорядочены с загрузками после барьера.
static void releaseFence()
Обеспечивает, что загрузки и сохранения перед барьером не будут переупорядочены с сохранениями после барьера.
final void set(Object... args)
Устанавливает значение переменной в newValue, с семантикой памяти установки, как если бы переменная была объявлена не-volatile и не-final.
final void setOpaque(Object... args)
Устанавливает значение переменной в newValue, в порядке программы, но без гарантии влияния на порядок памяти относительно других потоков.
final void setRelease(Object... args)
Устанавливает значение переменной в newValue и гарантирует, что предыдущие загрузки и сохранения не будут переупорядочены после этого доступа.
final void setVolatile(Object... args)
Устанавливает значение переменной в newValue, с семантикой памяти установки, как если бы переменная была объявлена volatile.
static void storeStoreFence()
Обеспечивает, что сохранения перед барьером не будут переупорядочены с сохранениями после барьера.
MethodHandle toMethodHandle(VarHandle.AccessMode accessMode)
Получает обработчик метода, связанный с этим VarHandle и заданным режимом доступа.
final String toString()
Возвращает компактное текстовое описание этого VarHandle, включая тип описываемой переменной и описание её координат.
Class<?> varType()
Возвращает тип переменной, к которой ссылается этот VarHandle.
final boolean weakCompareAndSet(Object... args)
Возможно атомарно устанавливает значение переменной в newValue с семантикой памяти setVolatile(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, как доступно с семантикой памяти getVolatile(java.lang.Object...).
final boolean weakCompareAndSetAcquire(Object... args)
Возможно атомарно устанавливает значение переменной в newValue со семантикой set(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, как доступно с семантикой памяти getAcquire(java.lang.Object...).
final boolean weakCompareAndSetPlain(Object... args)
Возможно атомарно устанавливает значение переменной в newValue со семантикой set(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, как доступно с семантикой памяти get(java.lang.Object...).
final boolean weakCompareAndSetRelease(Object... args)
Возможно атомарно устанавливает значение переменной в newValue со семантикой setRelease(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, как доступно с семантикой памяти get(java.lang.Object...).
abstract VarHandle withInvokeBehavior()
Возвращает VarHandle, с доступом к тем же переменным, что и этот VarHandle, но поведение вызова методов режимов доступа скорректировано на поведение вызова.
abstract VarHandle withInvokeExactBehavior()
Возвращает VarHandle, с доступом к тем же переменным, что и этот VarHandle, но поведение вызова методов режимов доступа скорректировано на поведение вызова с точным значением.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание методов

hasInvokeExactBehavior

public boolean hasInvokeExactBehavior()
Возвращает значение true, если у этого VarHandle есть поведение invoke-exact.
Возвращает:
true, если у этого VarHandle есть поведение invoke-exact.
С момента:
16
См. также:
  • withInvokeExactBehavior()
  • withInvokeBehavior()

get

public final Object get(Object... args)
Возвращает значение переменной с семантикой памяти чтения, как если бы переменная была объявлена как не-volatile. Обычно называется простым чтением.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn)T.

Символьный тип описателя в месте вызова get должен совпадать с типом режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET) для этого VarHandle.

Этот режим доступа поддерживается всеми экземплярами VarHandle и никогда не вызывает UnsupportedOperationException.

Параметры:
args - полиморфный список параметров в формате (CT1 ct1, ..., CTn), статически представленный с использованием varargs.
Возвращает:
полиморфный результат, который является значением переменной, статически представленный с использованием Object.
Исключения:
WrongMethodTypeException - если тип режима доступа не совпадает с символичным типом описателя вызывающего.
ClassCastException - если тип режима доступа совпадает с символичным типом описателя вызывающего, но приведение ссылки не удалось.

set

public final void set(Object... args)
Устанавливает значение переменной в newValue с семантикой памяти установки, как если бы переменная была объявлена как не-volatile и не-final. Обычно называется простым записью.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T newValue)void

Символьный тип описателя в месте вызова set должен совпадать с типом режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.SET) для этого VarHandle.

Параметры:
args - полиморфный список параметров в формате (CT1 ct1, ..., CTn ctn, T newValue), статически представленный с использованием varargs.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не совпадает с символичным типом описателя вызывающего.
ClassCastException - если тип режима доступа совпадает с символичным типом описателя вызывающего, но приведение ссылки не удалось.

getVolatile

public final Object getVolatile(Object... args)
Возвращает значение переменной с семантикой памяти чтения, как если бы переменная была объявлена volatile.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn)T.

Символьный тип описателя в месте вызова getVolatile должен совпадать с типом режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_VOLATILE) для этого VarHandle.

Параметры:
args - полиморфный список параметров в формате (CT1 ct1, ..., CTn ctn), статически представленный с использованием varargs.
Возвращает:
полиморфный результат, который является значением переменной, статически представленный с использованием Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не совпадает с символичным типом описателя вызывающего.
ClassCastException - если тип режима доступа совпадает с символичным типом описателя вызывающего, но приведение ссылки не удалось.

setVolatile

public final void setVolatile(Object... args)
Устанавливает значение переменной в newValue с семантикой памяти установки, как если бы переменная была объявлена volatile.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T newValue)void.

Символьный тип описателя в месте вызова setVolatile должен совпадать с типом режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.SET_VOLATILE) для этого VarHandle.

Примечание API:
Игнорируя множество семантических различий с C и C++, этот метод имеет эффекты упорядочивания памяти, совместимые с memory_order_seq_cst.
Параметры:
args - полиморфный список параметров в формате (CT1 ct1, ..., CTn ctn, T newValue), статически представленный с использованием varargs.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не совпадает с символичным типом описателя вызывающего.
ClassCastException - если тип режима доступа совпадает с символичным типом описателя вызывающего, но приведение ссылки не удалось.

getOpaque

public final Object getOpaque(Object... args)
Возвращает значение переменной, доступ к которой осуществляется в порядке выполнения программы, но без гарантии эффектов упорядочивания памяти по отношению к другим потокам.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn)T.

Символьный тип описателя в месте вызова getOpaque должен совпадать с типом режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_OPAQUE) для этого VarHandle.

Параметры:
args - полиморфный список параметров в формате (CT1 ct1, ..., CTn ctn), статически представленный с использованием varargs.
Возвращает:
полиморфный результат, который является значением переменной, статически представленный с использованием Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не совпадает с символичным типом описателя вызывающего.
ClassCastException - если тип режима доступа совпадает с символичным типом описателя вызывающего, но приведение ссылки не удалось.

setOpaque

public final void setOpaque(Object... args)
Устанавливает значение переменной в newValue в порядке выполнения программы, но без гарантии эффектов упорядочивания памяти по отношению к другим потокам.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T newValue)void.

Символьный тип описателя в месте вызова setOpaque должен совпадать с типом режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.SET_OPAQUE) для этого VarHandle.

Параметры:
args - полиморфный список параметров в формате (CT1 ct1, ..., CTn ctn, T newValue), статически представленный с использованием varargs.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не совпадает с символичным типом описателя вызывающего.
ClassCastException - если тип режима доступа совпадает с символичным типом описателя вызывающего, но приведение ссылки не удалось.

getAcquire

public final Object getAcquire(Object... args)
Возвращает значение переменной и гарантирует, что последующие операции чтения и записи не будут переупорядочены до этого доступа.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn)T.

Символьный тип описателя в месте вызова getAcquire должен совпадать с типом режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_ACQUIRE) для этого VarHandle.

Примечание API:
Игнорируя множество семантических различий с C и C++, этот метод имеет эффекты упорядочивания памяти, совместимые с memory_order_acquire упорядочиванием.
Параметры:
args - полиморфный список параметров в формате (CT1 ct1, ..., CTn ctn), статически представленный с использованием varargs.
Возвращает:
полиморфный результат, который является значением переменной, статически представленный с использованием Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не совпадает с символичным типом описателя вызывающего.
ClassCastException - если тип режима доступа совпадает с символичным типом описателя вызывающего, но приведение ссылки не удалось.

setRelease

public final void setRelease(Object... args)
Устанавливает значение переменной в newValue и гарантирует, что предыдущие операции чтения и записи не будут переупорядочены после этого доступа.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T newValue)void.

Символьный тип описателя в месте вызова setRelease должен совпадать с типом режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.SET_RELEASE) для этого VarHandle.

Примечание API:
Игнорируя множество семантических различий с C и C++, этот метод имеет эффекты упорядочивания памяти, совместимые с memory_order_release упорядочиванием.
Параметры:
args - полиморфный список параметров в формате (CT1 ct1, ..., CTn ctn, T newValue), статически представленный с использованием varargs.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не совпадает с символичным типом описателя вызывающего.
ClassCastException - если тип режима доступа совпадает с символичным типом описателя вызывающего, но приведение ссылки не удалось.

compareAndSet

public final boolean compareAndSet(Object... args)
Атомарно устанавливает значение переменной на newValue с семантикой памяти setVolatile(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, доступное с семантикой памяти getVolatile(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean.

Символьный тип описателя в месте вызова compareAndSet должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.COMPARE_AND_SET) для этого объекта VarHandle.

Параметры:
args - список параметров с полиморфизмом по сигнатурам вида (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue), статически представленный с помощью varargs.
Возвращает:
true при успехе, иначе false, если свидетельское значение не совпадало с expectedValue.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описателя вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описателя вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

compareAndExchange

public final Object compareAndExchange(Object... args)
Атомарно устанавливает значение переменной на newValue с семантикой памяти setVolatile(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, доступное с семантикой памяти getVolatile(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)T.

Символьный тип описателя в месте вызова compareAndExchange должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.COMPARE_AND_EXCHANGE) для этого объекта VarHandle.

Параметры:
args - список параметров с полиморфизмом по сигнатурам вида (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue), статически представленный с помощью varargs.
Возвращает:
результат с полиморфизмом по сигнатурам, представляющий свидетельское значение, которое будет таким же, как и expectedValue при успехе, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не совместим с символичным типом описателя вызывающей стороны.
ClassCastException - если тип режима доступа совместим с символичным типом описателя вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

compareAndExchangeAcquire

public final Object compareAndExchangeAcquire(Object... args)
Атомарно устанавливает значение переменной на newValue с семантикой памяти set(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, доступное с семантикой памяти getAcquire(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)T.

Символьный тип описателя в месте вызова compareAndExchangeAcquire должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE) для этого объекта VarHandle.

Параметры:
args - список параметров с полиморфизмом по сигнатурам вида (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue), статически представленный с помощью varargs.
Возвращает:
результат с полиморфизмом по сигнатурам, представляющий свидетельское значение, которое будет таким же, как и expectedValue при успехе, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описателя вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описателя вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • set(Object...)
  • getAcquire(Object...)

compareAndExchangeRelease

public final Object compareAndExchangeRelease(Object... args)
Атомарно устанавливает значение переменной на newValue с семантикой памяти setRelease(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, доступное с семантикой памяти get(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)T.

Символьный тип описателя в месте вызова compareAndExchangeRelease должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE) для этого объекта VarHandle.

Параметры:
args - список параметров с полиморфизмом по сигнатурам вида (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue), статически представленный с помощью varargs.
Возвращает:
результат с полиморфизмом по сигнатурам, представляющий свидетельское значение, которое будет таким же, как и expectedValue при успехе, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описателя вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описателя вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • setRelease(Object...)
  • get(Object...)

weakCompareAndSetPlain

public final boolean weakCompareAndSetPlain(Object... args)
Возможно атомарно устанавливает значение переменной на newValue с семантикой set(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, доступное с семантикой памяти get(java.lang.Object...).

Эта операция может случайно завершиться неудачей (обычно из-за конкуренции за память), даже если свидетельское значение совпадает с ожидаемым значением.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean.

Символьный тип описателя в месте вызова weakCompareAndSetPlain должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_PLAIN) для этого объекта VarHandle.

Параметры:
args - список параметров с полиморфизмом по сигнатурам вида (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue), статически представленный с помощью varargs.
Возвращает:
true при успехе, иначе false, если свидетельское значение не совпадало с expectedValue или если операция случайно завершилась неудачей.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описателя вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описателя вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • set(Object...)
  • get(Object...)

weakCompareAndSet

public final boolean weakCompareAndSet(Object... args)
Возможно атомарно устанавливает значение переменной на newValue с семантикой памяти setVolatile(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, доступное с семантикой памяти getVolatile(java.lang.Object...).

Эта операция может случайно завершиться неудачей (обычно из-за конкуренции за память), даже если свидетельское значение совпадает с ожидаемым значением.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean.

Символьный тип описателя в месте вызова weakCompareAndSet должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET) для этого объекта VarHandle.

Параметры:
args - список параметров с полиморфизмом по сигнатурам вида (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue), статически представленный с помощью varargs.
Возвращает:
true при успехе, иначе false, если свидетельское значение не совпадало с expectedValue или если операция случайно завершилась неудачей.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описателя вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описателя вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

weakCompareAndSetAcquire

public final boolean weakCompareAndSetAcquire(Object... args)
Возможно атомарно устанавливает значение переменной на newValue с семантикой set(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, доступное с семантикой памяти getAcquire(java.lang.Object...).

Данная операция может случайно завершиться неудачей (обычно из-за конкуренции за память), даже если свидетельское значение совпадает с ожидаемым значением.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean.

Символьный тип описания в месте вызова weakCompareAndSetAcquire должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE) для этого VarHandle.

Параметры:
args - список параметров с полиморфизмом сигнатуры вида (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue), статически представленный с помощью varargs.
Возвращает:
true при успехе, в противном случае false, если свидетельское значение не совпадало с ожидаемым expectedValue, или если операция случайно завершилась неудачей.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • set(Object...)
  • getAcquire(Object...)

weakCompareAndSetRelease

public final boolean weakCompareAndSetRelease(Object... args)
Возможно атомарно устанавливает значение переменной на newValue с семантикой setRelease(java.lang.Object...), если текущее значение переменной, называемое свидетельским значением, == expectedValue, доступное с семантикой памяти get(java.lang.Object...).

Данная операция может случайно завершиться неудачей (обычно из-за конкуренции за память), даже если свидетельское значение совпадает с ожидаемым значением.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean.

Символьный тип описания в месте вызова weakCompareAndSetRelease должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE) для этого VarHandle.

Параметры:
args - список параметров с полиморфизмом сигнатуры вида (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue), статически представленный с помощью varargs.
Возвращает:
true при успехе, в противном случае false, если свидетельское значение не совпадало с ожидаемым expectedValue, или если операция случайно завершилась неудачей.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • setRelease(Object...)
  • get(Object...)

getAndSet

public final Object getAndSet(Object... args)
Атомарно устанавливает значение переменной на newValue с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, доступное с семантикой памяти getVolatile(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T newValue)T.

Символьный тип описания в месте вызова getAndSet должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.GET_AND_SET) для этого VarHandle.

Параметры:
args - список параметров с полиморфизмом сигнатуры вида (CT1 ct1, ..., CTn ctn, T newValue), статически представленный с помощью varargs.
Возвращает:
результат с полиморфизмом сигнатуры, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

getAndSetAcquire

public final Object getAndSetAcquire(Object... args)
Атомарно устанавливает значение переменной на newValue с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, доступное с семантикой памяти getAcquire(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T newValue)T.

Символьный тип описания в месте вызова getAndSetAcquire должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.GET_AND_SET_ACQUIRE) для этого VarHandle.

Параметры:
args - список параметров с полиморфизмом сигнатуры вида (CT1 ct1, ..., CTn ctn, T newValue), статически представленный с помощью varargs.
Возвращает:
результат с полиморфизмом сигнатуры, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

getAndSetRelease

public final Object getAndSetRelease(Object... args)
Атомарно устанавливает значение переменной на newValue с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, доступное с семантикой памяти get(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T newValue)T.

Символьный тип описания в месте вызова getAndSetRelease должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.GET_AND_SET_RELEASE) для этого VarHandle.

Параметры:
args - список параметров с полиморфизмом сигнатуры вида (CT1 ct1, ..., CTn ctn, T newValue), статически представленный с помощью varargs.
Возвращает:
результат с полиморфизмом сигнатуры, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

getAndAdd

public final Object getAndAdd(Object... args)
Атомарно добавляет value к текущему значению переменной с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, доступное с семантикой памяти getVolatile(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T value)T.

Символьный тип описания в месте вызова getAndAdd должен соответствовать типу режима доступа, полученному в результате вызова accessModeType(VarHandle.AccessMode.GET_AND_ADD) для этого VarHandle.

Параметры:
args - список параметров с полиморфизмом сигнатуры вида (CT1 ct1, ..., CTn ctn, T value), статически представленный с помощью varargs.
Возвращает:
результат с полиморфизмом сигнатуры, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

getAndAddAcquire

public final Object getAndAddAcquire(Object... args)
Атомарно добавляет value к текущему значению переменной с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, полученное с семантикой памяти getAcquire(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T value)T.

Символическое описание типа в месте вызова getAndAddAcquire должно соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE) для этого VarHandle.

Параметры:
args - полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T value), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному описанию типа вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному описанию типа вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

getAndAddRelease

public final Object getAndAddRelease(Object... args)
Атомарно добавляет value к текущему значению переменной с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, полученное с семантикой памяти get(java.lang.Object...).

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T value)T.

Символическое описание типа в месте вызова getAndAddRelease должно соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_ADD_RELEASE) для этого VarHandle.

Параметры:
args - полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T value), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному описанию типа вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному описанию типа вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

getAndBitwiseOr

public final Object getAndBitwiseOr(Object... args)
Атомарно устанавливает значение переменной в результат побитового ИЛИ между текущим значением переменной и mask с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, полученное с семантикой памяти getVolatile(java.lang.Object...).

Если тип переменной является нецелочисленным типом boolean, то выполняется логическое ИЛИ вместо побитового ИЛИ.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T mask)T.

Символическое описание типа в месте вызова getAndBitwiseOr должно соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_OR) для этого VarHandle.

Параметры:
args - полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T mask), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному описанию типа вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному описанию типа вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

getAndBitwiseOrAcquire

public final Object getAndBitwiseOrAcquire(Object... args)
Атомарно устанавливает значение переменной в результат побитового ИЛИ между текущим значением переменной и mask с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, полученное с семантикой памяти getAcquire(java.lang.Object...).

Если тип переменной является нецелочисленным типом boolean, то выполняется логическое ИЛИ вместо побитового ИЛИ.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T mask)T.

Символическое описание типа в месте вызова getAndBitwiseOrAcquire должно соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE) для этого VarHandle.

Параметры:
args - полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T mask), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному описанию типа вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному описанию типа вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • set(Object...)
  • getAcquire(Object...)

getAndBitwiseOrRelease

public final Object getAndBitwiseOrRelease(Object... args)
Атомарно устанавливает значение переменной в результат побитового ИЛИ между текущим значением переменной и mask с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, полученное с семантикой памяти get(java.lang.Object...).

Если тип переменной является нецелочисленным типом boolean, то выполняется логическое ИЛИ вместо побитового ИЛИ.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T mask)T.

Символическое описание типа в месте вызова getAndBitwiseOrRelease должно соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_OR_RELEASE) для этого VarHandle.

Параметры:
args - полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T mask), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному описанию типа вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному описанию типа вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • setRelease(Object...)
  • get(Object...)

getAndBitwiseAnd

public final Object getAndBitwiseAnd(Object... args)
Атомарно устанавливает значение переменной в результат побитового И между текущим значением переменной и mask с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, полученное с семантикой памяти getVolatile(java.lang.Object...).

Если тип переменной является нецелочисленным типом boolean, то выполняется логическое И вместо побитового И.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T mask)T.

Символическое описание типа в месте вызова getAndBitwiseAnd должно соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_AND) для этого VarHandle.

Параметры:
args - полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T mask), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключения:
UnsupportedOperationException - если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException - если тип режима доступа не соответствует символьному описанию типа вызывающей стороны.
ClassCastException - если тип режима доступа соответствует символьному описанию типа вызывающей стороны, но приведение ссылки завершается неудачно.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

getAndBitwiseAndAcquire

public final Object getAndBitwiseAndAcquire(Object... args)
Атомарно устанавливает значение переменной в результат побитового И между текущим значением переменной и mask с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, как обращается с семантикой памяти getAcquire(java.lang.Object...).

Если тип переменной — нецелочисленный тип boolean, то выполняется логическое И вместо побитового И.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T mask)T.

Символьный тип описания в месте вызова getAndBitwiseAndAcquire должен соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_AND_ACQUIRE) для этого VarHandle.

Параметры:
args — полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T mask), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключение:
UnsupportedOperationException — если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException — если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException — если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • set(Object...)
  • getAcquire(Object...)

getAndBitwiseAndRelease

public final Object getAndBitwiseAndRelease(Object... args)
Атомарно устанавливает значение переменной в результат побитового И между текущим значением переменной и mask с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, как обращается с семантикой памяти get(java.lang.Object...).

Если тип переменной — нецелочисленный тип boolean, то выполняется логическое И вместо побитового И.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T mask)T.

Символьный тип описания в месте вызова getAndBitwiseAndRelease должен соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_AND_RELEASE) для этого VarHandle.

Параметры:
args — полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T mask), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключение:
UnsupportedOperationException — если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException — если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException — если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • setRelease(Object...)
  • get(Object...)

getAndBitwiseXor

public final Object getAndBitwiseXor(Object... args)
Атомарно устанавливает значение переменной в результат побитового ИСКЛЮЧАЮЩЕГО ИЛИ между текущим значением переменной и mask с семантикой памяти setVolatile(java.lang.Object...) и возвращает предыдущее значение переменной, как обращается с семантикой памяти getVolatile(java.lang.Object...).

Если тип переменной — нецелочисленный тип boolean, то выполняется логическое ИСКЛЮЧАЮЩЕЕ ИЛИ вместо побитового ИСКЛЮЧАЮЩЕГО ИЛИ.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T mask)T.

Символьный тип описания в месте вызова getAndBitwiseXor должен соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_XOR) для этого VarHandle.

Параметры:
args — полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T mask), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключение:
UnsupportedOperationException — если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException — если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException — если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • setVolatile(Object...)
  • getVolatile(Object...)

getAndBitwiseXorAcquire

public final Object getAndBitwiseXorAcquire(Object... args)
Атомарно устанавливает значение переменной в результат побитового ИСКЛЮЧАЮЩЕГО ИЛИ между текущим значением переменной и mask с семантикой памяти set(java.lang.Object...) и возвращает предыдущее значение переменной, как обращается с семантикой памяти getAcquire(java.lang.Object...).

Если тип переменной — нецелочисленный тип boolean, то выполняется логическое ИСКЛЮЧАЮЩЕЕ ИЛИ вместо побитового ИСКЛЮЧАЮЩЕГО ИЛИ.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T mask)T.

Символьный тип описания в месте вызова getAndBitwiseXorAcquire должен соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_XOR_ACQUIRE) для этого VarHandle.

Параметры:
args — полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T mask), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключение:
UnsupportedOperationException — если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException — если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException — если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • set(Object...)
  • getAcquire(Object...)

getAndBitwiseXorRelease

public final Object getAndBitwiseXorRelease(Object... args)
Атомарно устанавливает значение переменной в результат побитового ИСКЛЮЧАЮЩЕГО ИЛИ между текущим значением переменной и mask с семантикой памяти setRelease(java.lang.Object...) и возвращает предыдущее значение переменной, как обращается с семантикой памяти get(java.lang.Object...).

Если тип переменной — нецелочисленный тип boolean, то выполняется логическое ИСКЛЮЧАЮЩЕЕ ИЛИ вместо побитового ИСКЛЮЧАЮЩЕГО ИЛИ.

Подпись метода имеет вид (CT1 ct1, ..., CTn ctn, T mask)T.

Символьный тип описания в месте вызова getAndBitwiseXorRelease должен соответствовать типу режима доступа, который является результатом вызова accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_XOR_RELEASE) для этого VarHandle.

Параметры:
args — полиморфный список параметров подписи вида (CT1 ct1, ..., CTn ctn, T mask), статически представленный с помощью varargs.
Возвращает:
полиморфный результат, представляющий предыдущее значение переменной, статически представленный с помощью Object.
Исключение:
UnsupportedOperationException — если режим доступа не поддерживается для этого VarHandle.
WrongMethodTypeException — если тип режима доступа не соответствует символьному типу описания вызывающей стороны.
ClassCastException — если тип режима доступа соответствует символьному типу описания вызывающей стороны, но преобразование ссылки не выполнено.
См. также:
  • setRelease(Object...)
  • get(Object...)

withInvokeExactBehavior

public abstract VarHandle withInvokeExactBehavior()
Возвращает VarHandle с доступом к тем же переменным, что и этот VarHandle, но поведение вызова методов режима доступа скорректировано на поведение invoke-exact.

Если у этого VarHandle уже есть поведение invoke-exact, то возвращается этот VarHandle.

Вызов hasInvokeExactBehavior() на возвращенном var handle гарантированно вернет true.

Замечание API:
Поведение invoke-exact гарантирует, что при вызове метода режима доступа типы и арность аргументов должны соответствовать access mode type, в противном случае будет выброшено исключение WrongMethodTypeException.
Возвращает:
VarHandle с поведением invoke-exact
С:
16
См. также:
  • withInvokeBehavior()
  • hasInvokeExactBehavior()

с поведением вызова

public abstract VarHandle withInvokeBehavior()
Возвращает VarHandle с доступом к тем же переменным, что и этот VarHandle, но поведение вызова методов доступа настроено на поведение вызова.

Если у этого VarHandle уже есть поведение вызова, возвращается этот VarHandle.

Вызов hasInvokeExactBehavior() на возвращаемом обработчике переменных гарантированно вернёт false.

Возвращает:
VarHandle с поведением вызова
С:
16
См. также:
  • withInvokeExactBehavior()
  • hasInvokeExactBehavior()

toString

public final String toString()
Возвращает компактное текстовое описание этого VarHandle, включая тип описываемой переменной и описание её координат.
Переопределяет:
toString в классе Object
Возвращает:
Компактное текстовое описание этого VarHandle

varType

public Class<?> varType()
Возвращает тип переменной, на которую ссылается этот VarHandle.
Возвращает:
тип переменной, на которую ссылается этот VarHandle

coordinateTypes

public List<Class<?>> coordinateTypes()
Возвращает типы координат для этого VarHandle.
Возвращает:
типы координат для этого VarHandle. Возвращаемый список не изменяемый

accessModeType

public final MethodType accessModeType(VarHandle.AccessMode accessMode)
Получает тип режима доступа для этого VarHandle и заданного режима доступа.

Параметры типа режима доступа будут состоять из префикса, представляющего типы координат этого VarHandle, за которым следуют дополнительные типы, определённые методом режима доступа. Тип возвращаемого значения режима доступа определяется типом возвращаемого значения методом режима доступа.

Параметры:
accessMode — режим доступа, соответствующий методу с одинаковым именем, полиморфному по сигнатуре
Возвращает:
тип режима доступа для заданного режима доступа

isAccessModeSupported

public boolean isAccessModeSupported(VarHandle.AccessMode accessMode)
Возвращает true, если заданный режим доступа поддерживается, иначе false.

Возвращение значения false для заданного режима доступа указывает, что при вызове соответствующего метода режима доступа будет брошено исключение UnsupportedOperationException.

Параметры:
accessMode — режим доступа, соответствующий методу с одинаковым именем, полиморфному по сигнатуре
Возвращает:
true, если заданный режим доступа поддерживается, иначе false.

toMethodHandle

public MethodHandle toMethodHandle(VarHandle.AccessMode accessMode)
Получает обработчик метода, связанный с этим VarHandle и заданным режимом доступа.
Примечание API:
Этот метод для VarHandle vh и режима доступа {access-mode} возвращает обработчик метода, эквивалентный обработчику метода bmh в следующем коде (хотя он может быть более эффективным):

 MethodHandle mh = MethodHandles.varHandleExactInvoker(
                       vh.accessModeType(VarHandle.AccessMode.{access-mode}));

 MethodHandle bmh = mh.bindTo(vh);
 
Параметры:
accessMode — режим доступа, соответствующий методу с одинаковым именем, полиморфному по сигнатуре
Возвращает:
обработчик метода, связанный с этим VarHandle и заданным режимом доступа

describeConstable

public Optional<VarHandle.VarHandleDesc> describeConstable()
Возвращает номинальный дескриптор для этого экземпляра, если он может быть создан, или пустой Optional, если он не может быть создан.
Определено в:
describeConstable в интерфейсе Constable
Возвращает:
Optional, содержащий полученный номинальный дескриптор, или пустой Optional, если он не может быть создан.
С:
12

fullFence

public static void fullFence()
Обеспечивает, что нагрузки и сохранения перед барьером не будут переупорядочены с нагрузками и сохранениями после барьера.
Примечание API:
Игнорируя множество семантических различий с C и C++, этот метод имеет эффекты упорядочивания памяти, совместимые с atomic_thread_fence(memory_order_seq_cst)

acquireFence

public static void acquireFence()
Обеспечивает, что нагрузки перед барьером не будут переупорядочены с нагрузками и сохранениями после барьера.
Примечание API:
Игнорируя множество семантических различий с C и C++, этот метод имеет эффекты упорядочивания памяти, совместимые с atomic_thread_fence(memory_order_acquire)

releaseFence

public static void releaseFence()
Обеспечивает, что нагрузки и сохранения перед барьером не будут переупорядочены с сохранениями после барьера.
Примечание API:
Игнорируя множество семантических различий с C и C++, этот метод имеет эффекты упорядочивания памяти, совместимые с atomic_thread_fence(memory_order_release)

loadLoadFence

public static void loadLoadFence()
Обеспечивает, что нагрузки перед барьером не будут переупорядочены с нагрузками после барьера.

storeStoreFence

public static void storeStoreFence()
Обеспечивает, что сохранения перед барьером не будут переупорядочены с сохранениями после барьера.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/invoke/VarHandle.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API