Класс VolatileCallSite
public non-sealed class VolatileCallSite extends CallSite
VolatileCallSite — это CallSite, целевой метод которого ведет себя как переменная типа volatile. Инструкция invokedynamic, связанная с VolatileCallSite, видит обновления целевого метода вызова немедленно, даже если обновление происходит в другом потоке. Может быть штраф за производительность при такой тесной связи между потоками. В отличие от MutableCallSite, для объектов типа VolatileCallSite нет операции syncAll, так как каждое запись в переменную volatile неявно синхронизируется с потоками-читателями.
В остальных аспектах, VolatileCallSite взаимозаменяем с MutableCallSite.
- Since:
- 1.7
- See Also:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
VolatileCallSite |
Создаёт объект вызова со связанной с целевым методом переменной типа volatile. |
VolatileCallSite |
Создаёт объект вызова со связанной с целевым методом переменной типа volatile. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final MethodHandle |
dynamicInvoker() |
Возвращает метод-обработчик, эквивалентный инструкции invokedynamic, связанной с этим объектом вызова. |
final MethodHandle |
getTarget() |
Возвращает целевой метод вызова, который ведет себя как поле типа volatile объекта типа VolatileCallSite. |
void |
setTarget |
Обновляет целевой метод этого объекта вызова как переменную типа volatile. |
Подробное описание конструкторов
VolatileCallSite
public VolatileCallSite(MethodType type)
IllegalStateException, если его вызвать.- Parameters:
-
type- тип метода, который будет у этого объекта вызова - Throws:
-
NullPointerException- если предложенный тип равен null
VolatileCallSite
public VolatileCallSite(MethodHandle target)
- Parameters:
-
target- метод-обработчик, который будет начальным целевым методом вызова - Throws:
-
NullPointerException- если предложенный целевой метод равен null
Подробное описание методов
getTarget
public final MethodHandle getTarget()
volatile объекта типа VolatileCallSite. Взаимодействие getTarget с памятью аналогично чтению из поля типа volatile.
В частности, текущий поток должен выполнить новое чтение целевого метода из памяти и не должен пропустить недавнее обновление целевого метода другим потоком.
setTarget
public void setTarget(MethodHandle newTarget)
Взаимодействие с памятью аналогично записи в поле типа volatile. В частности, любой поток гарантированно увидит обновленный целевой метод в следующий раз, когда он вызовет getTarget.
- Specified by:
-
setTargetв классеCallSite - Parameters:
-
newTarget- новый целевой метод - Throws:
-
NullPointerException- если предложенный новый целевой метод равен null -
WrongMethodTypeException- если предложенный новый целевой метод имеет тип метода, отличающийся от предыдущего целевого метода - See Also:
dynamicInvoker
public final MethodHandle dynamicInvoker()
Этот метод эквивалентен следующему коду:
MethodHandle getTarget, invoker, result; getTarget = MethodHandles.publicLookup().bind(this, "getTarget", MethodType.methodType(MethodHandle.class)); invoker = MethodHandles.exactInvoker(this.type()); result = MethodHandles.foldArguments(invoker, getTarget)
- Specified by:
-
dynamicInvokerв классеCallSite - Returns:
- метод-обработчик, который всегда вызывает текущий целевой метод этого объекта вызова
© 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/VolatileCallSite.html