VolatileCallSite
public
class
VolatileCallSite
extends CallSite
java.lang.Object | ||
↳ | java.lang.invoke.CallSite | |
↳ | java.lang.invoke.VolatileCallSite |
A VolatileCallSite
is a CallSite
whose target acts like a volatile variable.
An invokedynamic
instruction linked to a VolatileCallSite
sees 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.
In other respects, a VolatileCallSite
is interchangeable
with MutableCallSite
.
See also:
Summary
Public constructors | |
---|---|
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. |
Public methods | |
---|---|
final
MethodHandle
|
dynamicInvoker()
Produces a method handle equivalent to an invokedynamic instruction which has been linked to this call site. |
final
MethodHandle
|
getTarget()
Returns the target method of the call site, which behaves
like a |
void
|
setTarget(MethodHandle newTarget)
Updates the target method of this call site, as a volatile variable. |
Inherited methods | |
---|---|
Public constructors
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 |
MethodHandle : the method handle that will be the initial target of the call site |
Throws | |
---|---|
NullPointerException |
if the proposed target is null |
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 an IllegalStateException
if called.
Parameters | |
---|---|
type |
MethodType : the method type that this call site will have |
Throws | |
---|---|
NullPointerException |
if the proposed type is null |
Public methods
dynamicInvoker
public final MethodHandle dynamicInvoker ()
Produces a method handle equivalent to an invokedynamic instruction which has been linked to this call site.
This method is equivalent to the following code:
MethodHandle getTarget, invoker, result; getTarget = MethodHandles.publicLookup().bind(this, "getTarget", MethodType.methodType(MethodHandle.class)); invoker = MethodHandles.exactInvoker(this.type()); result = MethodHandles.foldArguments(invoker, getTarget)
Returns | |
---|---|
MethodHandle |
a method handle which always invokes this call site's current target |
getTarget
public final MethodHandle getTarget ()
Returns the target method of the call site, which behaves
like a volatile
field of the VolatileCallSite
.
The interactions of getTarget
with memory are the same
as of a read from a volatile
field.
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.
Returns | |
---|---|
MethodHandle |
the linkage state of this call site, a method handle which can change over time |
See also:
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
.
Parameters | |
---|---|
newTarget |
MethodHandle : the new target |
Throws | |
---|---|
NullPointerException |
if the proposed new target is null |
WrongMethodTypeException |
if the proposed new target has a method type that differs from the previous target |
See also: