Java中Executor接口

本文由广州疯狂软件教育java培训分享:

一、结构

位于java.util.concurrent包下。 声明为:public interface Executor

所有已知子接口:ExecutorService, ScheduledExecutorService

所有已知实现类:AbstractExecutorService, ScheduledThreadPoolExecutor,

ThreadPoolExecutor 二、概述:

执行已提交的 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<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) {

             scheduleNext();

         }

     }

     protected synchronized void scheduleNext() {

         if ((active = tasks.poll()) != null) {

             executor.execute(active);

         }

     }

 }

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

ThreadPoolExecutor 类提供一个可扩展的线程池实现。Executors 类为这些 Executor 提供了便捷的工厂方法。

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

三、方法详细:

void execute(Runnable command)

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

参数:command - 可运行的任务

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

NullPointerException - 如果命令为 null

      疯狂软件教育中心依托开发团队的强大技术实力,把企业最新技术融入实训课程,打造金牌的品质,才能给予学员黄金的未来,疯狂软件凭借过硬的技术实力与丰富的项目开发经验,赢得了社会的肯定。疯狂软件Java培训师资力量强大,课程内容深入,为学员高薪就业做了很好的铺垫,拥有丰富就业指导经验的就业团队也成为了学员高薪就业的先天优势。地址:广州天河区车陂沣宏大厦3楼。

  疯狂Java在前几年的培训过程中,凭借自身强悍的师资、一流的课程、真实的项目、超高的就业率已经让广大南方学子成功走上软件工程师职业道路。大量毕业即失业的学子已通过疯狂Java实现了就业。

原文地址:https://www.cnblogs.com/gojava/p/3640773.html