Class FutureResult

java.lang.Object
EDU.oswego.cs.dl.util.concurrent.FutureResult

public class FutureResult extends Object
A class maintaining a single reference variable serving as the result of an operation. The result cannot be accessed until it has been set.

Sample Usage

 class ImageRenderer { Image render(byte[] raw); }
 class App {
   Executor executor = ...
   ImageRenderer renderer = ...
   void display(byte[] rawimage) {
     try {
       FutureResult futureImage = new FutureResult();
       Runnable command = futureImage.setter(new Callable() {
          public Object call() { return renderer.render(rawImage); }
       });
       executor.execute(command);
       drawBorders();             // do other things while executing
       drawCaption();
       drawImage((Image)(futureImage.get())); // use future
     }
     catch (InterruptedException ex) { return; }
     catch (InvocationTargetException ex) { cleanup(); return; }
   }
 }
 

[ Introduction to this package. ]

See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    the exception encountered by operation producing result
    protected boolean
    Status -- true after first set
    protected Object
    The result of the operation
  • Constructor Summary

    Constructors
    Constructor
    Description
    Create an initially unset FutureResult
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Clear the value and exception and set to not-ready, allowing this FutureResult to be reused.
    protected Object
    internal utility: either get the value or throw the exception
    get()
    Access the reference, waiting if necessary until it is ready.
    Get the exception, or null if there isn't one (yet).
    boolean
    Return whether the reference or exception have been set.
    Access the reference, even if not ready
    void
    set(Object newValue)
    Set the reference, and signal that it is ready.
    void
    Set the exception field, also setting ready status.
    setter(Callable function)
    Return a Runnable object that, when run, will set the result value.
    timedGet(long msecs)
    Wait at most msecs to access the reference.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • value_

      protected Object value_
      The result of the operation
    • ready_

      protected boolean ready_
      Status -- true after first set
    • exception_

      protected InvocationTargetException exception_
      the exception encountered by operation producing result
  • Constructor Details

    • FutureResult

      public FutureResult()
      Create an initially unset FutureResult
  • Method Details

    • setter

      public Runnable setter(Callable function)
      Return a Runnable object that, when run, will set the result value.
      Parameters:
      function - - a Callable object whose result will be held by this FutureResult.
      Returns:
      A Runnable object that, when run, will call the function and (eventually) set the result.
    • doGet

      protected Object doGet() throws InvocationTargetException
      internal utility: either get the value or throw the exception
      Throws:
      InvocationTargetException
    • get

      Access the reference, waiting if necessary until it is ready.
      Returns:
      current value
      Throws:
      InterruptedException - if current thread has been interrupted
      InvocationTargetException - if the operation producing the value encountered an exception.
    • timedGet

      Wait at most msecs to access the reference.
      Returns:
      current value
      Throws:
      TimeoutException - if not ready after msecs
      InterruptedException - if current thread has been interrupted
      InvocationTargetException - if the operation producing the value encountered an exception.
    • set

      public void set(Object newValue)
      Set the reference, and signal that it is ready. It is not considered an error to set the value more than once, but it is not something you would normally want to do.
      Parameters:
      newValue - The value that will be returned by a subsequent get();
    • setException

      public void setException(Throwable ex)
      Set the exception field, also setting ready status.
      Parameters:
      ex - The exception. It will be reported out wrapped within an InvocationTargetException
    • getException

      public InvocationTargetException getException()
      Get the exception, or null if there isn't one (yet). This does not wait until the future is ready, so should ordinarily only be called if you know it is.
      Returns:
      the exception encountered by the operation setting the future, wrapped in an InvocationTargetException
    • isReady

      public boolean isReady()
      Return whether the reference or exception have been set.
      Returns:
      true if has been set. else false
    • peek

      public Object peek()
      Access the reference, even if not ready
      Returns:
      current value
    • clear

      public void clear()
      Clear the value and exception and set to not-ready, allowing this FutureResult to be reused. This is not particularly recommended and must be done only when you know that no other object is depending on the properties of this FutureResult.