concurrent/src/main/java/io/airlift/concurrent/MoreFutures.java
public static <T> void addExceptionCallback(ListenableFuture<T> future, Runnable exceptionCallback, Executor executor)
    {
        requireNonNull(exceptionCallback, "exceptionCallback is null");

        addExceptionCallback(future, t -> exceptionCallback.run(), executor);
    }
public static <T> void addExceptionCallback(ListenableFuture<T> future, Runnable exceptionCallback, Executor executor)
    {
        requireNonNull(exceptionCallback, "exceptionCallback is null");

        addExceptionCallback(future, t -> exceptionCallback.run(), executor);
    }
Invokes the callback, using the specified executor, if the future fails.