クラスVolatileCallSite

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

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

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

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

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

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

    修飾子と型
    メソッド
    説明
    このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。
    コール・サイトのターゲット・メソッドを返しますが、これは、VolatileCallSitevolatileフィールドのように振る舞います。
    void
    このコール・サイトのターゲット・メソッドをvolatile変数として更新します。

    クラスで宣言されたメソッド CallSite

    type
    修飾子と型
    メソッド
    説明
    このコール・サイトのターゲットの型を返します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • 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
      戻り値:
      このコール・サイトの現在のターゲットを常に呼び出すメソッド・ハンドル