Class ConcurrencyReducer<R>

java.lang.Object
com.aoapps.concurrent.ConcurrencyReducer<R>

public class ConcurrencyReducer<R> extends Object
Limits the concurrency to a resource. 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 Details

    • ConcurrencyReducer

      public ConcurrencyReducer()
  • Method Details

    • executeSerialized

      public R executeSerialized(Callable<? extends R> callable) throws InterruptedException, ExecutionException

      Executes a callable at most once. If a callable is in the process of being executed by a different thread, the current thread will wait and use the results obtained by the other thread.

      Consider the following scenario:

      1. Thread A invokes MySQL: "CHECK TABLE example FAST QUICK"
      2. Thread B invokes MySQL: "CHECK TABLE example FAST QUICK" before Thread A has finished
      3. Thread B wait for results determined by Thread A
      4. Thread A completes, passes results to Thread B
      5. Threads A and B both return the results obtained only by Thread A
      Throws:
      InterruptedException
      ExecutionException