Class SingleLaneExecutorService

java.lang.Object
java.util.concurrent.AbstractExecutorService
hudson.remoting.SingleLaneExecutorService
All Implemented Interfaces:
Executor, ExecutorService

public class SingleLaneExecutorService extends AbstractExecutorService
Creates an ExecutorService that executes submitted tasks sequentially on top of another generic arbitrary ExecutorService.

In general, ExecutorService do not place constraints about the order in which submitted tasks are executed. This class takes such an executor service, then creates a stronger guarantee on the order of the executions. Namely, the submitted tasks are executed in the FIFO order, and no two tasks are executed concurrently.

A large number of SingleLaneExecutorServices backed by a single cached executor service is more efficient than the same number of single-threaded ExecutorService because of the thread sharing.

This class is named SingleLaneExecutorService because it's akin to create a driving lane in a high way. You can have many lanes, but each lane is strictly sequentially ordered.

Author:
Kohsuke Kawaguchi
  • Constructor Details

    • SingleLaneExecutorService

      public SingleLaneExecutorService(ExecutorService base)
      Parameters:
      base - Executor service that actually provides the threads that execute tasks.
  • Method Details

    • shutdown

      public void shutdown()

      Note that this does not shutdown the wrapped ExecutorService.

    • shutdownNow

      @NonNull public List<Runnable> shutdownNow()

      Note that this does not shutdown the wrapped ExecutorService.

    • isShutdown

      public boolean isShutdown()
    • isTerminated

      public boolean isTerminated()
    • awaitTermination

      public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
      Throws:
      InterruptedException
    • execute

      public void execute(@NonNull Runnable command)