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.
    Since:
    10.0
    Author:
    Pedro Ruivo
    • Constructor Detail

      • ActionSequencer

        public ActionSequencer​(ExecutorService executor,
                               boolean forceExecutor,
                               TimeService timeService)
        Parameters:
        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 Detail

      • 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.
        Parameters:
        keys - The ordering keys.
        action - The Callable to invoke.
        Returns:
        A CompletableFuture that is completed with the return value of resulting CompletableFuture.
        Throws:
        NullPointerException - if any of the parameter is null.
      • 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()