Class ConcurrencyReducer<T>


  • public class ConcurrencyReducer<T>
    extends java.lang.Object
    ConcurrencyReducer is used to queue tasks which will be executed in a manner reducing the number of concurrent tasks. Note: This is a port of ConcurrencyLimiter from futures-extra for use with CompletionStages
    • Method Detail

      • create

        public static <T> ConcurrencyReducer<T> create​(int maxConcurrency,
                                                       int maxQueueSize)
        Parameters:
        maxConcurrency - maximum number of futures in progress,
        maxQueueSize - maximum number of jobs in queue. This is a soft bound and may be temporarily exceeded if add() is called concurrently.
        Returns:
        a new concurrency limiter
      • add

        public java.util.concurrent.CompletableFuture<T> add​(java.util.concurrent.Callable<? extends java.util.concurrent.CompletionStage<T>> callable)
        the callable function will run as soon as the currently active set of futures is less than the maxConcurrency limit.
        Parameters:
        callable - - a function that creates a future.
        Returns:
        a proxy future that completes with the future created by the input function. This future will be immediately failed with ConcurrencyReducer.CapacityReachedException if the soft queue size limit is exceeded.
      • numQueued

        public int numQueued()
        Returns:
        the number of callables that are queued up and haven't started yet.
      • numActive

        public int numActive()
        Returns:
        the number of currently active futures that have not yet completed.
      • remainingQueueCapacity

        public int remainingQueueCapacity()
        Returns:
        the number of additional callables that can be queued before failing.
      • remainingActiveCapacity

        public int remainingActiveCapacity()
        Returns:
        the number of additional callables that can be run without queueing.