Package hudson.util

Class SequentialExecutionQueue

java.lang.Object
hudson.util.SequentialExecutionQueue
All Implemented Interfaces:
Executor

public class SequentialExecutionQueue extends Object implements Executor
Executor that collapses two equal Runnables into one, and makes sure no two equal Runnables get executed simultaneously.

That is, if a Runnable is executing and another one gets submitted, the 2nd one waits for the completion of the 1st one. Object.equals(Object) is used on Runnable to identify two equal Runnables.

Author:
Kohsuke Kawaguchi
  • Constructor Details

    • SequentialExecutionQueue

      public SequentialExecutionQueue(ExecutorService executors)
  • Method Details

    • getExecutors

      public ExecutorService getExecutors()
      Gets the base underlying executors.,
    • setExecutors

      public void setExecutors(ExecutorService svc)
      Starts using a new ExecutorService to carry out executions.

      The older ExecutorService will be shut down (but it's still expected to complete whatever they are doing and scheduled.)

    • execute

      public void execute(@NonNull Runnable item)
      Specified by:
      execute in interface Executor
    • isStarving

      public boolean isStarving(long threshold)
      Returns true if too much time is spent since some Runnable is submitted into the queue until they get executed.
    • getInProgress

      public Set<Runnable> getInProgress()
      Gets Runnables that are currently executed by a live thread.