- java.lang.Object
-
- java.lang.invoke.CallSite
-
- java.lang.invoke.VolatileCallSite
-
public class VolatileCallSite extends CallSite
VolatileCallSite
は、ターゲットの動作がvolatile変数と同じであるようなCallSite
です。VolatileCallSite
にリンクされたinvokedynamic
命令は、そのコール・サイト・ターゲットへの更新が別のスレッドで発生した場合でも、その更新を即時に認識します。 そうしたスレッド間の緊密な結合のため、パフォーマンス低下が発生する可能性があります。揮発性コール・サイトでは
MutableCallSite
と違ってsyncAll操作が存在しませんが、これは、volatile変数への書込みがすべてリーダー・スレッドに暗黙的に同期されるからです。その他の点では、
VolatileCallSite
はMutableCallSite
と交換可能です。- 導入されたバージョン:
- 1.7
- 関連項目:
MutableCallSite
-
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 VolatileCallSite(MethodHandle target)
ターゲットへのvolatileバインディングを持つコール・サイトを作成します。VolatileCallSite(MethodType type)
ターゲットへのvolatileバインディングを持つコール・サイトを作成します。
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 MethodHandle
getTarget()
コール・サイトのターゲット・メソッドを返しますが、これは、VolatileCallSite
のvolatile
フィールドのように振る舞います。void
setTarget(MethodHandle newTarget)
このコール・サイトのターゲット・メソッドをvolatile変数として更新します。-
クラス java.lang.invoke.CallSiteで宣言されたメソッド
dynamicInvoker, type
-
-
-
-
コンストラクタの詳細
-
VolatileCallSite
public VolatileCallSite(MethodType type)
ターゲットへのvolatileバインディングを持つコール・サイトを作成します。 初期ターゲットは、呼出し時にIllegalStateException
をスローするような、指定された型のメソッド・ハンドルに設定されます。- パラメータ:
type
- このコール・サイトのメソッド型- 例外:
NullPointerException
- 提案された型がnullの場合
-
VolatileCallSite
public VolatileCallSite(MethodHandle target)
ターゲットへのvolatileバインディングを持つコール・サイトを作成します。 ターゲットは指定された値に設定されます。- パラメータ:
target
- コール・サイトの初期ターゲットとなるメソッド・ハンドル- 例外:
NullPointerException
- 提案されたターゲットがnullの場合
-
-
メソッドの詳細
-
getTarget
public final MethodHandle getTarget()
コール・サイトのターゲット・メソッドを返しますが、これは、VolatileCallSite
のvolatile
フィールドのように振る舞います。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()
-
-