Class LimitedExecutor

All Implemented Interfaces:

public class LimitedExecutor extends Object implements Executor
Executes tasks in the given executor, but never has more than maxConcurrentTasks tasks running at the same time.

A task can finish running without allowing another task to run in its stead, with executeAsync(Supplier). A new task will only start after the CompletableFuture returned by the task has completed.

Blocking mode. If the executor is a WithinThreadExecutor, tasks will run in the thread that submitted them. If there are no available permits, the caller thread will block until a permit becomes available.

Dan Berindei
  • Constructor Details

    • LimitedExecutor

      public LimitedExecutor(String name, Executor executor, int maxConcurrentTasks)
  • Method Details

    • shutdownNow

      public void shutdownNow()
      Stops the executor and cancels any queued tasks. Stop and interrupt any tasks that have already been handed to the underlying executor.
    • execute

      public void execute(Runnable command)
      Specified by:
      execute in interface Executor
    • executeAsync

      public void executeAsync(Supplier<CompletionStage<Void>> asyncCommand)
      Similar to execute(Runnable), but the task can continue executing asynchronously, without blocking the OS thread, while still counting against this executor's limit.
      asyncCommand - A task that returns a non-null CompletionStage, which may be already completed or may complete at some point in the future.