Executor框架-1-Executor接口

Executor框架-1-Executor接口

Executor是一个接口,Executor框架的基础,它将任务的提交与任务的执行分离。Executor的功能,看源码注释内容基本就可以了解了;



package java.util.concurrent;

/**
 * Executor是执行提交任务的类;
 * 这个接口提供了将任务提交与任务运行分离的机制,屏蔽了运行时的线程调用、任务安排等细节;通常使用
 * Executor执行任务,而不必显式的使用Thread为每个任务创建线程并执行任务。可以像下面示例那样使用Executor执行任务: 
 *  Executor executor = anExecutor();
 *  executor.execute(new RunnableTask1());
 *  executor.execute(new RunnableTask2());
 * 
 * 然后,Executor接口不是必须异步执行任务的,最简单的应用方法是,executor在当前线程中直接执行任务:
 *  class DirectExecutor implements Executor {
 *   public void execute(Runnable r) {
 *    r.run();
 *   }
 *  }}
 *  
 * 在更加典型的应用场景中,任务在其他线程中执行任务而不是在当前线程,executor可以为每个任务派生一个新线程
 * class ThreadPerTaskExecutor implements Executor {
 *  public void execute(Runnable r) {
 *   new Thread(r).start();
 *  }
 * }}
 *  
 * 一些Executor实现类实现支持排序机制,可以决定在什么时候该怎么执行任务。
 * 在concurrent包中,提供了Execuor包的实现类ExecutorService,这个接口比Executor功能更丰富;
 * ThreadPoolExecutor实现了一个可扩展的线程池;Executors为这些Executor实现类提供了方便的工厂方法;
 *  
 * 内存一致性影响:一个Runnable提交给Executor必须执行在其执行之前,即使在另一个线程中;
 * @since 1.5
 * @author Doug Lea
 */
public interface Executor {

  /**
	 * 在未来的某个时间执行给定的任务,这个任务可能在一个新线程、线程池或当前线程中执行,
	 * 具体执行方法取决于实现Executor的类;
   * @param command the runnable task
   * @throws RejectedExecutionException if this task cannot be
   * accepted for execution
   * @throws NullPointerException if command is null
   */
  void execute(Runnable command);
}

posted @ 2020-11-07 16:36  donfaquir  阅读(184)  评论(0编辑  收藏  举报