Spec-Zone.ru › OpenJDK 8

Класс 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()

Возвращает целевой метод вызова, который ведет себя как поле типа volatile объекта VolatileCallSite.

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.

Spec-Zone.ru

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