Class FutureUtil


  • public class FutureUtil
    extends java.lang.Object
    This class is aimed at simplifying work with CompletableFuture.
    • Constructor Summary

      Constructors 
      Constructor Description
      FutureUtil()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static <T> java.util.concurrent.CompletableFuture<T> addTimeoutHandling​(java.util.concurrent.CompletableFuture<T> future, java.time.Duration timeout, java.util.concurrent.ScheduledExecutorService executor, java.util.function.Supplier<java.lang.Throwable> exceptionSupplier)
      Adds timeout handling to an existing CompletableFuture.
      static <T> java.util.concurrent.CompletableFuture<T> createFutureWithTimeout​(java.time.Duration timeout, java.util.concurrent.ScheduledExecutorService executor, java.util.function.Supplier<java.lang.Throwable> exceptionSupplier)
      Creates a new CompletableFuture instance with timeout handling.
      static java.util.concurrent.TimeoutException createTimeoutException​(java.lang.String message, java.lang.Class<?> sourceClass, java.lang.String sourceMethod)
      Creates a low-overhead timeout exception which is performance optimized to minimize allocations and cpu consumption.
      static <T> java.util.concurrent.CompletableFuture<T> failedFuture​(java.lang.Throwable t)  
      static <T> java.util.concurrent.CompletableFuture<T> futureWithDeadline​(java.util.concurrent.ScheduledExecutorService executor)  
      static <T> java.util.concurrent.CompletableFuture<T> futureWithDeadline​(java.util.concurrent.ScheduledExecutorService executor, java.lang.Long delay, java.util.concurrent.TimeUnit unit, java.lang.Exception exp)  
      static <T> java.util.Optional<java.lang.Throwable> getException​(java.util.concurrent.CompletableFuture<T> future)  
      static java.lang.Throwable unwrapCompletionException​(java.lang.Throwable t)  
      static java.util.concurrent.CompletableFuture<java.lang.Void> waitForAll​(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
      Return a future that represents the completion of the futures in the provided list.
      static java.util.concurrent.CompletableFuture<java.lang.Void> waitForAllAndSupportCancel​(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
      Return a future that represents the completion of the futures in the provided list.
      static java.util.concurrent.CompletableFuture<java.lang.Object> waitForAny​(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
      Return a future that represents the completion of any future in the provided list.
      static void whenCancelledOrTimedOut​(java.util.concurrent.CompletableFuture<?> future, java.lang.Runnable cancelAction)
      If the future is cancelled or times out, the cancel action will be invoked The action is executed once if the future completes with CancellationException or TimeoutException
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • FutureUtil

        public FutureUtil()
    • Method Detail

      • waitForAll

        public static java.util.concurrent.CompletableFuture<java.lang.Void> waitForAll​(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
        Return a future that represents the completion of the futures in the provided list.
        Parameters:
        futures - futures to wait for
        Returns:
        a new CompletableFuture that is completed when all of the given CompletableFutures complete
      • waitForAny

        public static java.util.concurrent.CompletableFuture<java.lang.Object> waitForAny​(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
        Return a future that represents the completion of any future in the provided list.
        Parameters:
        futures - futures to wait any
        Returns:
        a new CompletableFuture that is completed when any of the given CompletableFutures complete
      • waitForAllAndSupportCancel

        public static java.util.concurrent.CompletableFuture<java.lang.Void> waitForAllAndSupportCancel​(java.util.List<? extends java.util.concurrent.CompletableFuture<?>> futures)
        Return a future that represents the completion of the futures in the provided list. The future will support CompletableFuture.cancel(boolean). It will cancel all unfinished futures when the future gets cancelled.
        Parameters:
        futures - futures to wait for
        Returns:
        a new CompletableFuture that is completed when all of the given CompletableFutures complete
      • whenCancelledOrTimedOut

        public static void whenCancelledOrTimedOut​(java.util.concurrent.CompletableFuture<?> future,
                                                   java.lang.Runnable cancelAction)
        If the future is cancelled or times out, the cancel action will be invoked The action is executed once if the future completes with CancellationException or TimeoutException
        Parameters:
        future - future to attach the action to
        cancelAction - action to invoke if the future is cancelled or times out
      • failedFuture

        public static <T> java.util.concurrent.CompletableFuture<T> failedFuture​(java.lang.Throwable t)
      • unwrapCompletionException

        public static java.lang.Throwable unwrapCompletionException​(java.lang.Throwable t)
      • createFutureWithTimeout

        public static <T> java.util.concurrent.CompletableFuture<T> createFutureWithTimeout​(java.time.Duration timeout,
                                                                                            java.util.concurrent.ScheduledExecutorService executor,
                                                                                            java.util.function.Supplier<java.lang.Throwable> exceptionSupplier)
        Creates a new CompletableFuture instance with timeout handling.
        Type Parameters:
        T - type parameter for the future
        Parameters:
        timeout - the duration of the timeout
        executor - the executor to use for scheduling the timeout
        exceptionSupplier - the supplier for creating the exception
        Returns:
        the new CompletableFuture instance
      • addTimeoutHandling

        public static <T> java.util.concurrent.CompletableFuture<T> addTimeoutHandling​(java.util.concurrent.CompletableFuture<T> future,
                                                                                       java.time.Duration timeout,
                                                                                       java.util.concurrent.ScheduledExecutorService executor,
                                                                                       java.util.function.Supplier<java.lang.Throwable> exceptionSupplier)
        Adds timeout handling to an existing CompletableFuture.
        Type Parameters:
        T - type parameter for the future
        Parameters:
        future - the target future
        timeout - the duration of the timeout
        executor - the executor to use for scheduling the timeout
        exceptionSupplier - the supplier for creating the exception
        Returns:
        returns the original target future
      • createTimeoutException

        public static java.util.concurrent.TimeoutException createTimeoutException​(java.lang.String message,
                                                                                   java.lang.Class<?> sourceClass,
                                                                                   java.lang.String sourceMethod)
        Creates a low-overhead timeout exception which is performance optimized to minimize allocations and cpu consumption. It sets the stacktrace of the exception to the given source class and source method name. The instances of this class can be cached or stored as constants and reused multiple times.
        Parameters:
        message - exception message
        sourceClass - source class for manually filled in stacktrace
        sourceMethod - source method name for manually filled in stacktrace
        Returns:
        new TimeoutException instance
      • futureWithDeadline

        public static <T> java.util.concurrent.CompletableFuture<T> futureWithDeadline​(java.util.concurrent.ScheduledExecutorService executor,
                                                                                       java.lang.Long delay,
                                                                                       java.util.concurrent.TimeUnit unit,
                                                                                       java.lang.Exception exp)
      • futureWithDeadline

        public static <T> java.util.concurrent.CompletableFuture<T> futureWithDeadline​(java.util.concurrent.ScheduledExecutorService executor)
      • getException

        public static <T> java.util.Optional<java.lang.Throwable> getException​(java.util.concurrent.CompletableFuture<T> future)