Class ActionSequencer


public class ActionSequencer extends Object
Orders multiple actions/tasks based on a key.

It has the following properties:

  • If multiple actions have disjoint ordering keys, they are execute in parallel.
  • If multiple actions have the same ordering keys, deadlocks are avoided between them.
  • An action is only executed after the previous one is completed.
Pedro Ruivo
  • Constructor Details

    • ActionSequencer

      public ActionSequencer(Executor executor, boolean forceExecutor, TimeService timeService)
      executor - Executor to run submitted actions.
      forceExecutor - If false, run submitted actions on the submitter thread if possible. If true, always run submitted actions on the executor.
  • Method Details

    • orderOnKeys

      public <T> CompletionStage<T> orderOnKeys(Collection<?> keys, Callable<? extends CompletionStage<T>> action)
      It order a non-blocking action.

      It assumes the action does not block the invoked thread and it may execute it in this thread or, if there is one or more pending actions, in a separate thread (provided by the executor).

      Type Parameters:
      T - The return value type.
      keys - The ordering keys.
      action - The Callable to invoke.
      A CompletableFuture that is completed with the return value of resulting CompletableFuture.
      NullPointerException - if any of the parameter is null.
    • orderOnKey

      public <T> CompletionStage<T> orderOnKey(Object key, Callable<? extends CompletionStage<T>> action)
    • getPendingActions

      public long getPendingActions()
    • getRunningActions

      public long getRunningActions()
    • resetStatistics

      public void resetStatistics()
    • getAverageQueueTimeNanos

      public long getAverageQueueTimeNanos()
    • getAverageRunningTimeNanos

      public long getAverageRunningTimeNanos()
    • setStatisticEnabled

      public void setStatisticEnabled(boolean enable)
    • getMapSize

      public int getMapSize()