ListenableFuture is a Future interface implementation in Google Guava library. Since it has compatibility with Future, you can replace Future with ListenableFuture. ListenableFuture provides a mechanism of lister callback in addition features of Future. The result of Future should be fetched by main thread later but ListenableFuture call the callback when it finishes the calculation.

// ExecutorService especially for ListenableFuture
ListeningExecutorService service
  = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));

ListenableFuture<Explosion> explosion
  = service.submit(new Callable<Explosion>() {
      public Explosion call() {
        return pushBigRedButton();

Futures.addCallback(explosion, new FutureCallback<Explosion>() {
  // Called when succeeded
  public void onSuccess(Explosion explosion) {
  public void onFailure(Throwable thrown) {
    battleArchNemesis(); // escaped the explosion!

Today I found a tip of migration from CompletableFuture to ListenableFuture checking Presto commit. CompletableFuture which returns the result immediately can be created with java.util.concurrent.CompletableFuture.completableFuture. On the other hand, the counterpart of ListenableFuture is

So if you want to create a Future which returns the result immediately (of course it is nonsense that alone), you must use corresponding static methods respectively.

// For CompletableFuture

// For ListenableFuture