org.jgroups.util

## Class Promise<T>

- java.lang.Object
- - org.jgroups.util.Promise<T>

    public class Promise<T>
    extends java.lang.Object

Allows a thread to submit an asynchronous request and to wait for the result. The caller may choose to check for the result at a later time, or immediately and it may block or not. Both the caller and responder have to know the promise.

Author:
  Bela Ban

### Constructor Summary

Constructors
Constructor and Description
`Promise()`

### Method Summary

Methods
`java.util.concurrent.locks.Condition` `getCond()`
`java.util.concurrent.locks.Lock` `getLock()`
`T` `getResult()`
`T` `getResult(long timeout)` Returns the result, but never throws a TimeoutException; returns null instead.
`T` `getResultWithTimeout(long timeout)` Blocks until a result is available, or timeout milliseconds have elapsed
`boolean` `hasResult()` Checks whether result is available.
`void` `reset()` Causes all waiting threads to return
`void` `setResult(T obj)` Sets the result and notifies any threads waiting for it
`java.lang.String` `toString()`

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

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

### Constructor Detail

#### Promise

    public Promise()

### Method Detail

#### getLock

    public java.util.concurrent.locks.Lock getLock()

#### getCond

    public java.util.concurrent.locks.Condition getCond()

#### getResultWithTimeout

    public T getResultWithTimeout(long timeout)
                           throws TimeoutException

Blocks until a result is available, or timeout milliseconds have elapsed

Parameters:
  `timeout` -
Returns:
  An object
Throws:
  `TimeoutException` - If a timeout occurred (implies that timeout > 0)

#### getResult

    public T getResult()

#### getResult

    public T getResult(long timeout)

Returns the result, but never throws a TimeoutException; returns null instead.

Parameters:
  `timeout` -
Returns:
  Object

#### hasResult

    public boolean hasResult()

Checks whether result is available. Does not block.

#### setResult

    public void setResult(T obj)

Sets the result and notifies any threads waiting for it

#### reset

    public void reset()

Causes all waiting threads to return

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`