java.lang.Object
com.aoapps.concurrent.KeyedConcurrencyReducer<K,R>
- Direct Known Subclasses:
ConcurrencyLimiter
Limits the concurrency to a resource identified by any arbitrary key object.
When a second thread tries to access the same resource as a previous thread,
it will share the results that are obtained by the previous thread.
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionexecuteSerialized
(K key, Callable<? extends R> callable) Executes a callable at most once for the given key.
-
Constructor Details
-
KeyedConcurrencyReducer
public KeyedConcurrencyReducer()
-
-
Method Details
-
executeSerialized
public R executeSerialized(K key, Callable<? extends R> callable) throws InterruptedException, ExecutionException Executes a callable at most once for the given key. If a callable is in the process of being executed by a different thread (determined by key, not the callable instance), the current thread will wait and use the results obtained by the other thread.
Consider the following scenario:
- Thread A invokes MySQL: "CHECK TABLE example FAST QUICK"
- Thread B invokes MySQL: "CHECK TABLE example FAST QUICK" before Thread A has finished
- Thread B wait for results determined by Thread A
- Thread A completes, passes results to Thread B
- Threads A and B both return the results obtained only by Thread A
-