Класс VolatileCallSite
- java.lang.Object
-
- java.lang.invoke.CallSite
-
- java.lang.invoke.VolatileCallSite
public class VolatileCallSite extends CallSite
Объект VolatileCallSite является CallSite, целевой метод которого ведет себя как переменная типа volatile. Инструкции invokedynamic, связанные с VolatileCallSite, мгновенно видят обновления целевого метода вызова, даже если это обновление происходит в другом потоке. Может быть снижена производительность из-за такой тесной связи между потоками.
В отличие от MutableCallSite, для объектов типа volatile call site отсутствует операция syncAll, поскольку каждое присваивание переменной volatile неявно синхронизировано с потоками-читателями.
Во всех остальных отношениях объект VolatileCallSite взаимозаменяем с MutableCallSite.
- См. также:
MutableCallSite
Конструкторы
| Конструктор и описание |
|---|
VolatileCallSite(MethodHandle target) Создаёт вызов с привязкой volatile к его целевому методу. |
VolatileCallSite(MethodType type) Создаёт вызов с привязкой volatile к его целевому методу. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
MethodHandle |
dynamicInvoker() Возвращает обработчик метода, эквивалентный инструкции invokedynamic, которая была связана с этим вызовом. |
MethodHandle |
getTarget() Возвращает целевой метод вызова, который ведет себя как поле типа |
void |
setTarget(MethodHandle newTarget) Обновляет целевой метод этого вызова как переменную типа volatile. |
Методы, унаследованные от класса java.lang.invoke.CallSite
type Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
VolatileCallSite
public VolatileCallSite(MethodType type)
Создаёт вызов с привязкой volatile к его целевому методу. Начальный целевой метод задаётся обработчиком метода заданного типа, который выбросит IllegalStateException при вызове.
- Параметры:
-
type- тип метода, который будет иметь этот вызов - Исключения:
-
NullPointerException- если предложенный тип равен null
VolatileCallSite
public VolatileCallSite(MethodHandle target)
Создаёт вызов с привязкой volatile к его целевому методу. Целевой метод устанавливается в заданное значение.
- Параметры:
-
target- обработчик метода, который будет начальным целевым методом вызова - Исключения:
-
NullPointerException- если предложенный целевой метод равен null
Методы
getTarget
public final MethodHandle getTarget()
Возвращает целевой метод вызова, который ведёт себя как поле volatile объекта VolatileCallSite.
Взаимодействие с памятью при получении значения из getTarget аналогично чтению из поля типа volatile.
В частности, текущий поток должен выполнить новое чтение целевого метода из памяти и должен увидеть недавнее обновление целевого метода другим потоком.
- Спецификация:
-
getTargetв классеCallSite - Возвращает:
- состояние связи этого вызова, обработчик метода, который может меняться со временем
- См. также:
setTarget(java.lang.invoke.MethodHandle)
setTarget
public void setTarget(MethodHandle newTarget)
Обновляет целевой метод этого вызова как переменную типа volatile. Тип нового целевого метода должен соответствовать типу старого целевого метода.
Взаимодействие с памятью аналогично записи в поле типа volatile. В частности, любой поток гарантированно увидит обновлённый целевой метод в следующий раз, когда он вызовет getTarget.
- Спецификация:
-
setTargetв классеCallSite - Параметры:
-
newTarget- новый целевой метод - Исключения:
-
NullPointerException- если предложенный новый целевой метод равен null -
WrongMethodTypeException- если предложенный новый целевой метод имеет тип метода, отличный от предыдущего целевого метода - См. также:
getTarget()
dynamicInvoker
public final MethodHandle dynamicInvoker()
Создаёт обработчик метода, эквивалентный инструкции invokedynamic, которая была связана с этим вызовом.
Этот метод эквивалентен следующему коду:
MethodHandle getTarget, invoker, result; getTarget = MethodHandles.publicLookup().bind(this, "getTarget", MethodType.methodType(MethodHandle.class)); invoker = MethodHandles.exactInvoker(this.type()); result = MethodHandles.foldArguments(invoker, getTarget)
- Спецификация:
-
dynamicInvokerв классеCallSite - Возвращает:
- обработчик метода, который всегда вызывает текущий целевой метод этого вызова
© 1993, 2020, 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.