Package com.spotify.futures
Class ConcurrencyReducer<T>
- java.lang.Object
-
- com.spotify.futures.ConcurrencyReducer<T>
-
public class ConcurrencyReducer<T> extends java.lang.ObjectConcurrencyReduceris 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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classConcurrencyReducer.CapacityReachedException
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description 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.static <T> ConcurrencyReducer<T>create(int maxConcurrency, int maxQueueSize)intnumActive()intnumQueued()intremainingActiveCapacity()intremainingQueueCapacity()
-
-
-
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.CapacityReachedExceptionif 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.
-
-