Класс VolatileCallSite
- java.lang.Object
- java.lang.invoke.CallSite
- java.lang.invoke.VolatileCallSite
public class VolatileCallSite extends CallSite
Объект VolatileCallSite является CallSite, целевой метод которого ведет себя как переменная типа volatile. Инструкция invokedynamic, связанная с VolatileCallSite, видит обновления целевого метода вызова сразу же, даже если это обновление произошло в другом потоке. Взаимосвязь потоков может сказаться на производительности.
В отличие от MutableCallSite, у вызовов volatile нет операции syncAll, так как каждое присваивание volatile переменной неявно синхронизируется с потоками-читателями.
В остальных аспектах VolatileCallSite взаимозаменяем с MutableCallSite.
- Since:
- 1.7
- См. также:
MutableCallSite
Конструкторы
| Конструктор | Описание |
|---|---|
VolatileCallSite(MethodHandle target) | Создает вызов с volatile связью с его целевым методом. |
VolatileCallSite(MethodType type) | Создает вызов с volatile связью с его целевым методом. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
MethodHandle | getTarget() | Возвращает целевой метод вызова, который ведет себя как поле |
void | setTarget(MethodHandle newTarget) | Обновляет целевой метод этого вызова как volatile переменную. |
Методы, объявленные в классе java.lang.invoke.CallSite
dynamicInvoker, 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()
© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/invoke/VolatileCallSite.html