Class JdkFutureAdapters

java.lang.Object
dev.mccue.guava.concurrent.JdkFutureAdapters

public final class JdkFutureAdapters extends Object
Utilities necessary for working with libraries that supply plain Future instances. Note that, whenever possible, it is strongly preferred to modify those libraries to return ListenableFuture directly.

For interoperability between ListenableFuture and CompletableFuture, consider Future Converter.

Since:
10.0 (replacing Futures.makeListenable, which existed in 1.0)
Author:
Sven Mawson
  • Method Details

    • listenInPoolThread

      public static <V extends @Nullable Object> ListenableFuture<V> listenInPoolThread(Future<V> future)
      Assigns a thread to the given Future to provide ListenableFuture functionality.

      Warning: If the input future does not already implement ListenableFuture, the returned future will emulate ListenableFuture#addListener by taking a thread from an internal, unbounded pool at the first call to addListener and holding it until the future is Future#isDone() done.

      Prefer to create ListenableFuture instances with SettableFuture, MoreExecutors#listeningDecorator( java.util.concurrent.ExecutorService), ListenableFutureTask, AbstractFuture, and other utilities over creating plain Future instances to be upgraded to ListenableFuture after the fact.

    • listenInPoolThread

      public static <V extends @Nullable Object> ListenableFuture<V> listenInPoolThread(Future<V> future, Executor executor)
      Submits a blocking task for the given Future to provide ListenableFuture functionality.

      Warning: If the input future does not already implement ListenableFuture, the returned future will emulate ListenableFuture#addListener by submitting a task to the given executor at the first call to addListener. The task must be started by the executor promptly, or else the returned ListenableFuture may fail to work. The task's execution consists of blocking until the input future is Future#isDone() done, so each call to this method may claim and hold a thread for an arbitrary length of time. Use of bounded executors or other executors that may fail to execute a task promptly may result in deadlocks.

      Prefer to create ListenableFuture instances with SettableFuture, MoreExecutors#listeningDecorator( java.util.concurrent.ExecutorService), ListenableFutureTask, AbstractFuture, and other utilities over creating plain Future instances to be upgraded to ListenableFuture after the fact.

      Since:
      12.0