Executor

作者: 鹿小纯0831 | 来源:发表于2019-03-18 15:30 被阅读0次

执行提交的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(final Runnable r) {
      tasks.add(new Runnable() {
        public void run() {
          try {
            r.run();
          } finally {
            scheduleNext();
          }
        }
      });
      if (active == null) {
        scheduleNext();
      }
    }
 
    protected synchronized void scheduleNext() {
      if ((active = tasks.poll()) != null) {
        executor.execute(active);
      }
    }
  }

此包中提供的code Executor实现实现了link ExecutorService,这是一个更广泛的接口。 link ThreadPoolExecutor类提供可扩展的线程池实现。 Executors类为这些Executor提供了方便的工厂方法。

 void execute(Runnable command);

在将来的某个时间执行给定的命令。 该命令可以在code Executor实现的判断下在新线程,池化线程或调用线程中执行。

Runnable

Runnable接口应该由其实例打算由线程执行的任何类实现。 该类必须定义一个名为run的无参数的方法。
此接口旨在为希望在活动时执行代码的对象提供通用协议。 例如,Runnable由类Thread实现。 活动只是意味着一个线程已经启动但尚未停止。
此外,Runnable提供了一个类活动而不是继承Thread的方法。 实现Runnable的类可以通过实例化Thread实例并将其自身作为目标传递而无需子类化Thread。 在大多数情况下,如果您只打算覆盖run()方法而不是其他Thread方法,则应使用Runnable接口。

 public abstract void run();

当使用实现接口Runnable的对象来创建线程时,启动该线程会导致在该单独执行的线程中调用对象的run方法。
run方法的一般契约是它可以采取任何行动。

相关文章

网友评论

      本文标题:Executor

      本文链接:https://www.haomeiwen.com/subject/afovmqtx.html