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バインディングを持つコール・サイトを作成します。
- 
メソッドのサマリー修飾子と型メソッド説明このコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。コール・サイトのターゲット・メソッドを返しますが、これは、VolatileCallSiteのvolatileフィールドのように振る舞います。voidsetTarget(MethodHandle newTarget)このコール・サイトのターゲット・メソッドをvolatile変数として更新します。
- 
コンストラクタの詳細- 
VolatileCallSitepublic VolatileCallSite(MethodType type)ターゲットへのvolatileバインディングを持つコール・サイトを作成します。 初期ターゲットは、呼出し時にIllegalStateExceptionをスローするような、指定された型のメソッド・ハンドルに設定されます。- パラメータ:
- type- このコール・サイトのメソッド型
- 例外:
- NullPointerException- 提案された型がnullの場合
 
- 
VolatileCallSitepublic VolatileCallSite(MethodHandle target)ターゲットへのvolatileバインディングを持つコール・サイトを作成します。 ターゲットは指定された値に設定されます。- パラメータ:
- target- コール・サイトの初期ターゲットとなるメソッド・ハンドル
- 例外:
- NullPointerException- 提案されたターゲットがnullの場合
 
 
- 
- 
メソッドの詳細- 
getTargetpublic final MethodHandle getTarget()コール・サイトのターゲット・メソッドを返しますが、これは、VolatileCallSiteのvolatileフィールドのように振る舞います。getTargetのメモリーとの相互作用は、volatileフィールドから読取りを行う場合と同じです。特に、現在のスレッドはメモリーからのターゲットの新しい読取りを発行する必要があり、別のスレッドによるターゲットへの最新の更新を確認する必要があります。 - 定義:
- getTarget、クラス:- CallSite
- 戻り値:
- このコール・サイトのリンケージ状態(時間とともに変わる可能性のあるメソッド・ハンドル)
- 関連項目:
- setTarget(java.lang.invoke.MethodHandle)
 
- 
setTargetpublic void setTarget(MethodHandle newTarget)このコール・サイトのターゲット・メソッドをvolatile変数として更新します。 新しいターゲットの型は古いターゲットの型と同じでなければいけません。メモリーとの相互作用は、volatileフィールドに書込みを行う場合と同じです。 具体的には、次回の getTarget呼出し時に更新後のターゲットを得られることが、すべてのスレッドで保証されます。- 定義:
- setTarget、クラス:- CallSite
- パラメータ:
- newTarget- 新しいターゲット
- 例外:
- NullPointerException- 提案された新しいターゲットがnullの場合
- WrongMethodTypeException- 提案された新しいターゲットのメソッド型が以前のターゲットと異なる場合
- 関連項目:
- getTarget()
 
- 
dynamicInvokerpublic 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
- 戻り値:
- このコール・サイトの現在のターゲットを常に呼び出すメソッド・ハンドル
 
 
-