- java.lang.Object
-
- java.lang.invoke.CallSite
-
- java.lang.invoke.VolatileCallSite
-
public class VolatileCallSite extends CallSite
AVolatileCallSiteis aCallSitewhose target acts like a volatile variable. Aninvokedynamicinstruction linked to aVolatileCallSitesees updates to its call site target immediately, even if the update occurs in another thread. There may be a performance penalty for such tight coupling between threads.Unlike
MutableCallSite, there is no syncAll operation on volatile call sites, since every write to a volatile variable is implicitly synchronized with reader threads.In other respects, a
VolatileCallSiteis interchangeable withMutableCallSite.- Since:
- 1.7
- See Also:
MutableCallSite
-
-
Constructor Summary
Constructors Constructor Description VolatileCallSite(MethodHandle target)Creates a call site with a volatile binding to its target.VolatileCallSite(MethodType type)Creates a call site with a volatile binding to its target.
-
Method Summary
Modifier and Type Method Description MethodHandlegetTarget()Returns the target method of the call site, which behaves like avolatilefield of theVolatileCallSite.voidsetTarget(MethodHandle newTarget)Updates the target method of this call site, as a volatile variable.-
Methods declared in class java.lang.invoke.CallSite
dynamicInvoker, type
-
-
-
-
Constructor Detail
-
VolatileCallSite
public VolatileCallSite(MethodType type)
Creates a call site with a volatile binding to its target. The initial target is set to a method handle of the given type which will throw anIllegalStateExceptionif called.- Parameters:
type- the method type that this call site will have- Throws:
NullPointerException- if the proposed type is null
-
VolatileCallSite
public VolatileCallSite(MethodHandle target)
Creates a call site with a volatile binding to its target. The target is set to the given value.- Parameters:
target- the method handle that will be the initial target of the call site- Throws:
NullPointerException- if the proposed target is null
-
-
Method Detail
-
getTarget
public final MethodHandle getTarget()
Returns the target method of the call site, which behaves like avolatilefield of theVolatileCallSite.The interactions of
getTargetwith memory are the same as of a read from avolatilefield.In particular, the current thread is required to issue a fresh read of the target from memory, and must not fail to see a recent update to the target by another thread.
- Specified by:
getTargetin classCallSite- Returns:
- the linkage state of this call site, a method handle which can change over time
- See Also:
setTarget(java.lang.invoke.MethodHandle)
-
setTarget
public void setTarget(MethodHandle newTarget)
Updates the target method of this call site, as a volatile variable. The type of the new target must agree with the type of the old target.The interactions with memory are the same as of a write to a volatile field. In particular, any threads is guaranteed to see the updated target the next time it calls
getTarget.- Specified by:
setTargetin classCallSite- Parameters:
newTarget- the new target- Throws:
NullPointerException- if the proposed new target is nullWrongMethodTypeException- if the proposed new target has a method type that differs from the previous target- See Also:
getTarget()
-
-