モジュール java.base
パッケージ java.lang.invoke

クラスVolatileCallSite

java.lang.Object
java.lang.invoke.CallSite
java.lang.invoke.VolatileCallSite

public class VolatileCallSite extends CallSite
VolatileCallSiteは、ターゲットの動作がvolatile変数と同じであるようなCallSiteです。 VolatileCallSiteにリンクされたinvokedynamic命令は、そのコール・サイト・ターゲットへの更新が別のスレッドで発生した場合でも、その更新を即時に認識します。 そうしたスレッド間の緊密な結合のため、パフォーマンス低下が発生する可能性があります。

揮発性コール・サイトではMutableCallSiteと違ってsyncAll操作が存在しませんが、これは、volatile変数への書込みがすべてリーダー・スレッドに暗黙的に同期されるからです。

その他の点では、VolatileCallSiteMutableCallSiteと交換可能です。

導入されたバージョン:
1.7
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    ターゲットへのvolatileバインディングを持つコール・サイトを作成します。
    ターゲットへのvolatileバインディングを持つコール・サイトを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。
    コール・サイトのターゲット・メソッドを返しますが、これは、VolatileCallSitevolatileフィールドのように振る舞います。
    void
    このコール・サイトのターゲット・メソッドを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()
      コール・サイトのターゲット・メソッドを返しますが、これは、VolatileCallSitevolatileフィールドのように振る舞います。

      getTargetのメモリーとの相互作用は、volatileフィールドから読取りを行う場合と同じです。

      特に、現在のスレッドはメモリーからのターゲットの新しい読取りを発行する必要があり、別のスレッドによるターゲットへの最新の更新を確認する必要があります。

      定義:
      getTarget、クラス: CallSite
      戻り値:
      このコール・サイトのリンケージ状態(時間とともに変わる可能性のあるメソッド・ハンドル)
      関連項目:
    • setTarget

      public void setTarget(MethodHandle newTarget)
      このコール・サイトのターゲット・メソッドをvolatile変数として更新します。 新しいターゲットの型は古いターゲットの型と同じでなければいけません。

      メモリーとの相互作用は、volatileフィールドに書込みを行う場合と同じです。 具体的には、次回のgetTarget呼出し時に更新後のターゲットを得られることが、すべてのスレッドで保証されます。

      定義:
      setTarget、クラス: CallSite
      パラメータ:
      newTarget - 新しいターゲット
      例外:
      NullPointerException - 提案された新しいターゲットがnullの場合
      WrongMethodTypeException - 提案された新しいターゲットのメソッド型が以前のターゲットと異なる場合
      関連項目:
    • 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
      戻り値:
      このコール・サイトの現在のターゲットを常に呼び出すメソッド・ハンドル