org.apache.ignite.lang

## Interface IgniteFuture<V>

Type Parameters:
  `V` - Type of the result for the future.

All Superinterfaces:
  Future<V>

All Known Subinterfaces:
  ComputeTaskFuture<R>, SchedulerFuture<R>

All Known Implementing Classes:
  IgniteFinishedFutureImpl, IgniteFinishedFutureImplEx, IgniteFutureImpl

    public interface IgniteFuture<V>
    extends Future<V>

Extension for standard `Future` interface. It adds simplified exception handling, functional programming support and ability to listen for future completion via functional callback.

### Method Summary

Methods
`boolean` `cancel()` Cancels this future.
`<T> IgniteFuture<T>` `chain(IgniteClosure<? super IgniteFuture<V>,T> doneCb)` Make a chained future to convert result of this future (when complete) into a new format.
`boolean` `concurrentNotify()` Gets value concurrent listener notification flag.
`void` `concurrentNotify(boolean concurNotify)` Flag to turn on or off concurrent listener notification.
`long` `duration()` Gets duration in milliseconds between start of the future and current time if future is not finished, or between start and finish of this future.
`V` `get()` Synchronously waits for completion of the computation and returns computation result.
`V` `get(long timeout)` Synchronously waits for completion of the computation for up to the timeout specified and returns computation result.
`V` `get(long timeout, TimeUnit unit)` Synchronously waits for completion of the computation for up to the timeout specified and returns computation result.
`void` `listenAsync(IgniteInClosure<? super IgniteFuture<V>> lsnr)` Registers listener closure to be asynchronously notified whenever future completes.
`long` `startTime()` Gets start time for this future.
`void` `stopListenAsync(IgniteInClosure<? super IgniteFuture<V>> lsnr)` Removes given listener from the future.
`boolean` `syncNotify()` Gets value of synchronous listener notification flag.
`void` `syncNotify(boolean syncNotify)` Flag to turn on or off synchronous listener notification.

### Methods inherited from interface java.util.concurrent.Future

`cancel, isCancelled, isDone`

### Method Detail

#### get

    V get()
          throws IgniteException

Synchronously waits for completion of the computation and returns computation result.

Specified by:
  `get` in interface `Future<V>`
Returns:
  Computation result.
Throws:
  `IgniteInterruptedException` - Subclass of `IgniteException` thrown if the wait was interrupted.
  `IgniteFutureCancelledException` - Subclass of `IgniteException` thrown if computation was cancelled.
  `IgniteException` - If computation failed.

#### get

    V get(long timeout)
          throws IgniteException

Synchronously waits for completion of the computation for up to the timeout specified and returns computation result. This method is equivalent to calling `get(long, TimeUnit.MILLISECONDS)`.

Parameters:
  `timeout` - The maximum time to wait in milliseconds.
Returns:
  Computation result.
Throws:
  `IgniteInterruptedException` - Subclass of `IgniteException` thrown if the wait was interrupted.
  `IgniteFutureCancelledException` - Subclass of `IgniteException` thrown if computation was cancelled.
  `IgniteFutureTimeoutException` - Subclass of `IgniteException` thrown if the wait was timed out.
  `IgniteException` - If computation failed.

#### get

    V get(long timeout,
        TimeUnit unit)
          throws IgniteException

Synchronously waits for completion of the computation for up to the timeout specified and returns computation result.

Specified by:
  `get` in interface `Future<V>`
Parameters:
  `timeout` - The maximum time to wait.
  `unit` - The time unit of the `timeout` argument.
Returns:
  Computation result.
Throws:
  `IgniteInterruptedException` - Subclass of `IgniteException` thrown if the wait was interrupted.
  `IgniteFutureCancelledException` - Subclass of `IgniteException` thrown if computation was cancelled.
  `IgniteFutureTimeoutException` - Subclass of `IgniteException` thrown if the wait was timed out.
  `IgniteException` - If computation failed.

#### cancel

    boolean cancel()
                   throws IgniteException

Cancels this future.

Returns:
  `True` if future was canceled (i.e. was not finished prior to this call).
Throws:
  `IgniteException` - If cancellation failed.

#### startTime

    long startTime()

Gets start time for this future.

Returns:
  Start time for this future.

#### duration

    long duration()

Gets duration in milliseconds between start of the future and current time if future is not finished, or between start and finish of this future.

Returns:
  Time in milliseconds this future has taken to execute.

#### syncNotify

    void syncNotify(boolean syncNotify)

Flag to turn on or off synchronous listener notification. If this flag is `true`, then upon future completion the notification may happen in the same thread that created the future. This becomes especially important when adding listener to a future that is already `done` - if this flag is `true`, then listener will be immediately notified within the same thread.

Default value is `false`. To change the default, set `IgniteSystemProperties.IGNITE_FUT_SYNC_NOTIFICATION` system property to `true`.

Parameters:
  `syncNotify` - Flag to turn on or off synchronous listener notification.

#### syncNotify

    boolean syncNotify()

Gets value of synchronous listener notification flag. If this flag is `true`, then upon future completion the notification may happen in the same thread that created the future. This becomes especially important when adding listener to a future that is already `done` - if this flag is `true`, then listener will be immediately notified within the same thread.

Default value is `false`. To change the default, set `IgniteSystemProperties.IGNITE_FUT_SYNC_NOTIFICATION` system property to `true`.

Returns:
  Synchronous listener notification flag.

#### concurrentNotify

    void concurrentNotify(boolean concurNotify)

Flag to turn on or off concurrent listener notification. This flag comes into play only when a future has more than one listener subscribed to it. If this flag is `true`, then all listeners will be notified concurrently by different threads; otherwise, listeners will be notified one after another within one thread (depending on `syncNotify()` flag, these notifications may happen either in the same thread which started the future, or in a different thread).

Default value is `false`. To change the default, set `IgniteSystemProperties.IGNITE_FUT_CONCURRENT_NOTIFICATION` system property to `true`.

Parameters:
  `concurNotify` - Flag to turn on or off concurrent listener notification.

#### concurrentNotify

    boolean concurrentNotify()

Gets value concurrent listener notification flag. This flag comes into play only when a future has more than one listener subscribed to it. If this flag is `true`, then all listeners will be notified concurrently by different threads; otherwise, listeners will be notified one after another within one thread (depending on `syncNotify()` flag, these notifications may happen either in the same thread which started the future, or in a different thread).

Default value is `false`. To change the default, set `IgniteSystemProperties.IGNITE_FUT_CONCURRENT_NOTIFICATION` system property to `true`.

Returns:
  Concurrent listener notification flag

#### listenAsync

    void listenAsync(IgniteInClosure<? super IgniteFuture<V>> lsnr)

Registers listener closure to be asynchronously notified whenever future completes.

Parameters:
  `lsnr` - Listener closure to register. If not provided - this method is no-op.

#### stopListenAsync

    void stopListenAsync(IgniteInClosure<? super IgniteFuture<V>> lsnr)

Removes given listener from the future.

Parameters:
  `lsnr` - Listener to remove.

#### chain

    <T> IgniteFuture<T> chain(IgniteClosure<? super IgniteFuture<V>,T> doneCb)

Make a chained future to convert result of this future (when complete) into a new format. It is guaranteed that done callback will be called only ONCE.

Parameters:
  `doneCb` - Done callback that is applied to this future when it finishes to produce chained future result.
Returns:
  Chained future that finishes after this future completes and done callback is called.

2015 Copyright © Apache Software Foundation

Follow @ApacheIgnite

Ignite Fabric | : ver. 1.0.0-RC1
Release Date | : February 17 2015