Class Promise<V,​T extends java.lang.Throwable>


  • public class Promise<V,​T extends java.lang.Throwable>
    extends java.lang.Object
    Represents promised data of the parameterized type V and allows waiting on it. An exception may also be delivered to a waiter, and will be of the parameterized type T.

    For atomic operations on a promise, e.g. checking if a value is delivered and if it is not then setting it, the associated lock for the promise should be acquired while doing so.

    • Constructor Summary

      Constructors 
      Constructor Description
      Promise​(java.lang.String name, ExceptionWrapper<T> wrapper)
      Creates this promise with given name and exception wrapper.
      Promise​(java.lang.String name, ExceptionWrapper<T> wrapper, java.util.concurrent.locks.ReentrantLock lock)
      Creates this promise with given name, exception wrapper, and associated lock.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void clear()
      Clears this promise by setting its value and queued exception to null.
      void deliver​(V val)
      Set this promise's value to val.
      void deliverError​(java.lang.Throwable e)
      Queues error that will be thrown in any waiting thread or any thread that attempts to wait on this promise hereafter.
      AFuture<V> future()  
      boolean hasWaiters()  
      boolean inError()  
      boolean isDelivered()  
      boolean isFulfilled()  
      void lock()
      Acquire the lock associated with this promise.
      V retrieve()
      Wait indefinitely for this promise's value to be deliver.
      V retrieve​(long timeout, java.util.concurrent.TimeUnit unit)
      Wait for timeout duration for this promise's value to be deliver.
      java.lang.String toString()  
      V tryRetrieve​(long timeout, java.util.concurrent.TimeUnit unit)
      Wait for timeout duration for this promise's value to be deliver.
      void unlock()
      Release the lock associated with this promise.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • Promise

        public Promise​(java.lang.String name,
                       ExceptionWrapper<T> wrapper)
        Creates this promise with given name and exception wrapper. Allocates a new lock object for this promise.
        Parameters:
        name - name of this promise
        wrapper - ExceptionWrapper that will be used for chaining exceptions
      • Promise

        public Promise​(java.lang.String name,
                       ExceptionWrapper<T> wrapper,
                       java.util.concurrent.locks.ReentrantLock lock)
        Creates this promise with given name, exception wrapper, and associated lock.
        Parameters:
        name - name of this promise
        wrapper - ExceptionWrapper that will be used for chaining exceptions
        lock - lock to use
    • Method Detail

      • deliver

        public void deliver​(V val)
        Set this promise's value to val. Any waiters will be delivered this value.
        Parameters:
        val - the value
      • deliverError

        public void deliverError​(java.lang.Throwable e)
        Queues error that will be thrown in any waiting thread or any thread that attempts to wait on this promise hereafter.
        Parameters:
        e - the error
      • clear

        public void clear()
        Clears this promise by setting its value and queued exception to null.
      • retrieve

        public V retrieve()
                   throws T extends java.lang.Throwable
        Wait indefinitely for this promise's value to be deliver.
        Returns:
        the value
        Throws:
        T - in case another thread informs the promise of an error meanwhile
        T extends java.lang.Throwable
      • retrieve

        public V retrieve​(long timeout,
                          java.util.concurrent.TimeUnit unit)
                   throws T extends java.lang.Throwable
        Wait for timeout duration for this promise's value to be deliver.
        Parameters:
        timeout - the timeout
        unit - time unit for the timeout
        Returns:
        the value
        Throws:
        T - in case another thread informs the promise of an error meanwhile, or the timeout expires
        T extends java.lang.Throwable
      • tryRetrieve

        public V tryRetrieve​(long timeout,
                             java.util.concurrent.TimeUnit unit)
                      throws T extends java.lang.Throwable
        Wait for timeout duration for this promise's value to be deliver.

        If the value is not deliver by the time the timeout expires, returns null.

        Parameters:
        timeout - the timeout
        unit - time unit for the timeout
        Returns:
        the value or null
        Throws:
        T - in case another thread informs the promise of an error meanwhile
        T extends java.lang.Throwable
      • isDelivered

        public boolean isDelivered()
        Returns:
        whether this promise has a value delivered, and no error waiting to pop.
      • inError

        public boolean inError()
        Returns:
        whether this promise has been delivered an error.
      • isFulfilled

        public boolean isFulfilled()
        Returns:
        whether this promise was fulfilled with either a value or an error.
      • hasWaiters

        public boolean hasWaiters()
        Returns:
        whether this promise has threads waiting on it.
      • lock

        public void lock()
        Acquire the lock associated with this promise.
      • unlock

        public void unlock()
        Release the lock associated with this promise.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object