模块  java.base
软件包  java.lang.invoke

Class VolatileCallSite


  • public class VolatileCallSite
    extends CallSite
    VolatileCallSiteCallSite其目标的作用类似于volatile变量。 链接到VolatileCallSiteinvokedynamic指令会VolatileCallSite看到其调用站点目标的更新,即使更新发生在另一个线程中也是如此。 线程之间的这种紧密耦合可能存在性能损失。

    MutableCallSite不同,在易失性调用站点上没有syncAll operation ,因为对volatile变量的每次写入都与读取器线程隐式同步。

    在其他方面, VolatileCallSite可与MutableCallSite互换。

    从以下版本开始:
    1.7
    另请参见:
    MutableCallSite
    • 构造方法详细信息

      • VolatileCallSite

        public VolatileCallSite​(MethodType type)
        创建一个具有与其目标的volatile绑定的调用站点。 初始目标设置为给定类型的方法句柄,如果被调用将抛出IllegalStateException
        参数
        type - 此调用站点将具有的方法类型
        异常
        NullPointerException - 如果建议的类型为null
      • VolatileCallSite

        public VolatileCallSite​(MethodHandle target)
        创建一个具有与其目标的volatile绑定的调用站点。 目标设置为给定值。
        参数
        target - 将成为调用站点的初始目标的方法句柄
        异常
        NullPointerException - 如果建议的目标为空
    • 方法详细信息

      • getTarget

        public final MethodHandle getTarget()
        返回调用点,其行为类似于目标方法volatile的领域VolatileCallSite

        getTarget与内存的交互与volatile字段的读取相同。

        特别是,当前线程需要从内存中发出对目标的新读取,并且必须能够看到另一个线程对目标的最新更新。

        Specified by:
        getTarget在类 CallSite
        结果
        此调用站点的链接状态,一个可以随时间变化的方法句柄
        另请参见:
        setTarget(java.lang.invoke.MethodHandle)
      • setTarget

        public void setTarget​(MethodHandle newTarget)
        将此调用站点的目标方法更新为volatile变量。 新目标的类型必须与旧目标的类型一致。

        与内存的交互与对volatile字段的写入相同。 特别是,任何线程都保证在下次调用getTarget时看到更新的目标。

        Specified by:
        setTargetCallSite
        参数
        newTarget - 新目标
        异常
        NullPointerException - 如果建议的新目标为空
        WrongMethodTypeException - 如果建议的新目标的方法类型与先前的目标不同
        另请参见:
        getTarget()