java.util.concurrent.Executor 接口 源码

线程池相关

源码:

public interface Executor {
    void execute(Runnable command);
}

接口 Executor

已知子接口:

    ExecutorServiceScheduledExecutorService

已知实现类:

    AbstractExecutorService,ThreadPoolExecutorScheduled,ThreadPoolExecutor

    执行已提交的 Runnable 任务的对象。

    此接口将任务提交与每个任务如何运行的机制分离开来。通常使用 Executor 而不是显式地创建线程。例如,可能会使用以下方法,而不是为一组任务中的每个任务调用 new Thread(new(RunnableTask())).start():

    Executor executor = new executor接口的实现;
    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<Runnable>();
     final Executor executor;
     Runnable active;

     SerialExecutor(Executor executor) {
         this.executor = executor;
     }

     public synchronized void execute(final Runnable r) {
         tasks.offer(new Runnable() {//在队尾插入一个线程节点
             public void run() {
                 try {
                     r.run();
                 } finally {
                     scheduleNext();//执行完毕则尝试让下一个节点继续执行
                 }
             }
         });
         if (active == null) {//如果正在执行的线程为null,即说明队列之前为空的状态.此时当前线程节点应当立即执行
             scheduleNext();//执行当前的头节点线程
         }
     }

     //使得当前头节点执行
     protected synchronized void scheduleNext() {
         if ((active = tasks.poll()) != null) {//poll():得到当前头节点并移除;若返回的节点不为null
             executor.execute(active);//执行当前节点
         }
     }
 }

    此包中提供的 Executor 实现了 ExecutorService,这是一个使用更广泛的接口。

 ThreadPoolExecutor 类实现了ExecutorService提供了一个可扩展的线程池实现。 

    Executors 类为这些 Executor 提供了便捷的工厂方法。

 

方法摘要

 void execute(Runnable command) 
          在未来某个时间执行给定的命令。

execute

void execute(Runnable command)

    在未来某个时间执行给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中执行,这由 Executor 实现决定。

    参数:

    command - 可运行的任务

    抛出:

    RejectedExecutionException - 如果不能接受执行此任务。

    NullPointerException - 如果命令为 null

猜你喜欢

转载自my.oschina.net/u/3858564/blog/2960516