The First Cry of Atom Today is the first day of the rest of my life.

ListenableFuture and immediateFuture

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) {
    walkAwayFrom(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 com.google.common.util.concurrent.Futures.immediateFuture.

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
completedFuture(null);

// For ListenableFuture
immediateFuture(null);