final CompletableFuture<Void> result1 = retryFutureInExecutor(uniformDelay, 1, maxLoops, maxDelay, true, executorService); try { Exceptions.handleInterrupted(() -> result1.get()); CompletableFuture<Void> result2 = retryFutureInExecutor(uniformDelay, 1, maxLoops, maxDelay, false, executorService); try { result2.join(); final CompletableFuture<Void> result3 = retryFutureInExecutor(exponentialInitialDelay, multiplier, maxLoops, maxDelay, true, executorService); try { Exceptions.handleInterrupted(() -> result3.get()); final CompletableFuture<Void> result4 = retryFutureInExecutor(uniformDelay, 1, maxLoops - 1, maxDelay, true, executorService); try { result4.join();