org.jgroups.blocks.executor

## Class ExecutionService.DistributedFuture.Sync<V>

- java.lang.Object
- - java.util.concurrent.locks.AbstractOwnableSynchronizer
  - - java.util.concurrent.locks.AbstractQueuedSynchronizer
    - - org.jgroups.blocks.executor.ExecutionService.DistributedFuture.Sync<V>

All Implemented Interfaces:
  java.io.Serializable

Enclosing class:
  ExecutionService.DistributedFuture<V>

    protected static final class ExecutionService.DistributedFuture.Sync<V>
    extends java.util.concurrent.locks.AbstractQueuedSynchronizer

Synchronization control for FutureTask. Note that this must be a non-static inner class in order to invoke the protected `done` method. For clarity, all inner class support methods are same as outer, prefixed with "inner". Uses AQS sync state to represent run status

See Also:
  Serialized Form

### Nested Class Summary

### Nested classes/interfaces inherited from class java.util.concurrent.locks.AbstractQueuedSynchronizer

`java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject`

### Field Summary

Fields
`protected java.util.concurrent.Callable<V>` `callable` The underlying callable
`protected static int` `CANCELLED` State value representing that task was cancelled
`protected java.lang.Throwable` `exception` The exception to throw from get()
`protected ExecutionService.DistributedFuture<V>` `future` The containing future
`protected static int` `RAN` State value representing that task ran
`protected V` `result` The result to return from get()
`protected java.lang.Thread` `runner` The thread running task.
`protected static int` `RUNNING` State value representing that task is running

### Constructor Summary

Constructors
Constructor and Description
`ExecutionService.DistributedFuture.Sync(ExecutionService.DistributedFuture<V> future, java.util.concurrent.Callable<V> callable)`

### Method Summary

Methods
`protected int` `tryAcquireShared(int ignore)` Implements AQS base acquire to succeed if ran or cancelled
`protected boolean` `tryReleaseShared(int ignore)` Implements AQS base release to always signal after setting final done status by nulling runner thread.

### Methods inherited from class java.util.concurrent.locks.AbstractQueuedSynchronizer

`acquire, acquireInterruptibly, acquireShared, acquireSharedInterruptibly, compareAndSetState, getExclusiveQueuedThreads, getFirstQueuedThread, getQueuedThreads, getQueueLength, getSharedQueuedThreads, getState, getWaitingThreads, getWaitQueueLength, hasContended, hasQueuedThreads, hasWaiters, isHeldExclusively, isQueued, owns, release, releaseShared, setState, toString, tryAcquire, tryAcquireNanos, tryAcquireSharedNanos, tryRelease`

### Methods inherited from class java.util.concurrent.locks.AbstractOwnableSynchronizer

`getExclusiveOwnerThread, setExclusiveOwnerThread`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### RUNNING

    protected static final int RUNNING

State value representing that task is running

See Also:
  Constant Field Values

#### RAN

    protected static final int RAN

State value representing that task ran

See Also:
  Constant Field Values

#### CANCELLED

    protected static final int CANCELLED

State value representing that task was cancelled

See Also:
  Constant Field Values

#### future

    protected final ExecutionService.DistributedFuture<V> future

The containing future

#### callable

    protected final java.util.concurrent.Callable<V> callable

The underlying callable

#### result

    protected V result

The result to return from get()

#### exception

    protected java.lang.Throwable exception

The exception to throw from get()

#### runner

    protected transient volatile java.lang.Thread runner

The thread running task. When nulled after set/cancel, this indicates that the results are accessible. Must be volatile, to ensure visibility upon completion.

### Constructor Detail

#### ExecutionService.DistributedFuture.Sync

    public ExecutionService.DistributedFuture.Sync(ExecutionService.DistributedFuture<V> future,
                                           java.util.concurrent.Callable<V> callable)

### Method Detail

#### tryAcquireShared

    protected int tryAcquireShared(int ignore)

Implements AQS base acquire to succeed if ran or cancelled

Overrides:
  `tryAcquireShared` in class `java.util.concurrent.locks.AbstractQueuedSynchronizer`

#### tryReleaseShared

    protected boolean tryReleaseShared(int ignore)

Implements AQS base release to always signal after setting final done status by nulling runner thread.

Overrides:
  `tryReleaseShared` in class `java.util.concurrent.locks.AbstractQueuedSynchronizer`