Module java.base

Interface Executor

所有已知的子接口:
ExecutorService, ScheduledExecutorService
所有已知的实现类:
AbstractExecutorService, ForkJoinPool, ScheduledThreadPoolExecutor, ThreadPoolExecutor

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之前的线程中的操作在其执行开始之前,可能在另一个线程中发生。

自 JDK 版本:
1.5
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    execute(Runnable command)
    在将来的某个时间执行给定的命令。
  • Method Details

    • execute

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