APIdia Launch Partner
Top Description Fields Constructors Methods
java.lang.invoke

public non-sealed Class VolatileCallSite

extends CallSite
Class Inheritance

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.

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 VolatileCallSite is interchangeable with MutableCallSite.

Author
John Rose, JSR 292 EG
Since
1.7
See Also
MutableCallSite

Field Summary

Inherited from java.lang.invoke.CallSite:
target

Constructor Summary

AccessConstructor and Description
public
VolatileCallSite(MethodType
the method type that this call site will have
type
)

Creates a call site with a volatile binding to its target.

public
VolatileCallSite(MethodHandle
the method handle that will be the initial target of the call site
target
)

Creates a call site with a volatile binding to its target.

Method Summary

Modifier and TypeMethod and Description
public final MethodHandle
dynamicInvoker()

Implements abstract java.lang.invoke.CallSite.dynamicInvoker.

Produces a method handle equivalent to an invokedynamic instruction which has been linked to this call site.

public final MethodHandle

Returns:

the linkage state of this call site, a method handle which can change over time
getTarget
()

Implements abstract java.lang.invoke.CallSite.getTarget.

Returns the target method of the call site, which behaves like a volatile field of the VolatileCallSite.

public void
setTarget(MethodHandle
the new target
newTarget
)

Implements abstract java.lang.invoke.CallSite.setTarget.

Updates the target method of this call site, as a volatile variable.

Inherited from java.lang.invoke.CallSite:
getTargetVolatilemakeDynamicInvokermakeSitesetTargetNormalsetTargetVolatiletype

Constructor Detail

VolatileCallSiteback to summary
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

Exceptions
NullPointerException:
if the proposed type is null
VolatileCallSiteback to summary
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

Exceptions
NullPointerException:
if the proposed target is null

Method Detail

dynamicInvokerback to summary
public final MethodHandle dynamicInvoker()

Implements abstract java.lang.invoke.CallSite.dynamicInvoker.

Doc from java.lang.invoke.CallSite.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)
Annotations
@Override
getTargetback to summary
public final MethodHandle getTarget()

Implements abstract java.lang.invoke.CallSite.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

Annotations
@Override
See Also
setTarget
setTargetback to summary
public void setTarget(MethodHandle newTarget)

Implements abstract java.lang.invoke.CallSite.setTarget.

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

Annotations
@Override
Exceptions
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
getTarget