模块  java.base
软件包  java.util.concurrent

Interface Executor

  • All Known Subinterfaces:
    ExecutorServiceScheduledExecutorService
    所有已知实现类:
    AbstractExecutorServiceForkJoinPoolScheduledThreadPoolExecutorThreadPoolExecutor

    public interface Executor
    执行提交的Runnable任务的对象。 此接口提供了一种将任务提交与每个任务的运行机制分离的方法,包括线程使用,调度等的详细信息。通常使用Executor而不是显式创建线程。 例如,您可以使用以下命令而不是为每组任务调用new Thread(new RunnableTask()).start()
       Executor executor = anExecutor(); executor.execute(new RunnableTask1()); executor.execute(new RunnableTask2()); ... 
    但是, Executor接口并不严格要求执行是异步的。 在最简单的情况下,执行程序可以立即在调用者的线程中运行提交的任务:
       class DirectExecutor implements Executor { public void execute(Runnable r) { r.run(); } } 
    更典型地,任务在除调用者线程之外的某个线程中执行。 下面的执行程序为每个任务生成一个新线程。
       class ThreadPerTaskExecutor implements Executor { public void execute(Runnable r) { new Thread(r).start(); } } 
    许多Executor实现对如何以及何时安排任务施加了某种限制。 下面的执行程序将任务提交序列化到第二个执行程序,说明了一个复合执行程序。
       class SerialExecutor implements Executor { final Queue<Runnable> tasks = new ArrayDeque<>(); final Executor executor; Runnable active; SerialExecutor(Executor executor) { this.executor = executor; } public synchronized void execute(Runnable r) { tasks.add(() -> { try { r.run(); } finally { scheduleNext(); } }); if (active == null) { scheduleNext(); } } protected synchronized void scheduleNext() { if ((active = tasks.poll()) != null) { executor.execute(active); } } } 
    此包中提供的Executor实现实现了ExecutorService ,这是一个更广泛的接口。 ThreadPoolExecutor类提供可扩展的线程池实现。 Executors类为这些执行程序提供了方便的工厂方法。

    内存一致性效果:在将Runnable对象提交到Executor happen-before之前,线程中的操作可能在另一个线程中开始执行。

    从以下版本开始:
    1.5
    • 方法详细信息

      • execute

        void execute​(Runnable command)
        在将来的某个时间执行给定的命令。 该命令可以在新线程,池化线程或调用线程中执行,由Executor实现自行决定。
        参数
        command - 可运行的任务
        异常
        RejectedExecutionException - 如果无法接受此任务执行
        NullPointerException - 如果command为null