一、声明
  public interface ExecutorService extends Executor 位于java.util.concurrent包下
  所有超级接口:Executor
  所有已知子接口:ScheduledExecutorService
  所有已知实现类:AbstractExecutorService, ScheduledThreadPoolExecutor, ThreadPoolExecutor
  二、概述
  Executor 提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。
  可以关闭 ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭 ExecutorService.shutdown() 方法在终止前允许执行以前提交的任务,而shutdownNow() 方法阻止等待任务启动并试图停止当前正在执行的任务。在终止时,执行程序没有任务在执行,也没有任务在等待执行,并且无法提交新任务。应该关闭未使用的ExecutorService 以允许回收其资源。
  通过创建并返回一个可用于取消执行和/或等待完成的 Future,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable)。方法 invokeAny 和 invokeAll 是批量执行的最常用形式,它们执行任务 collection,然后等待至少一个,或全部任务完成(可使用ExecutorCompletionService 类来编写这些方法的自定义变体)。
  Executors 类提供了用于此包中所提供的执行程序服务的工厂方法。
  下面给出了一个网络服务的简单结构,这里线程池中的线程作为传入的请求。它使用了预先配置的 Executors.newFixedThreadPool(int) 工厂方法:
  class NetworkService implements Runnable {
  private final ServerSocket serverSocket;
  private final ExecutorService pool;
  public NetworkService(int port, int poolSize)
  throws IOException {
  serverSocket = new ServerSocket(port);
  pool = Executors.newFixedThreadPool(poolSize);
  }
  public void run() { // run the service
  try {
  for (;;) {
  pool.execute(new Handler(serverSocket.accept()));
  }
  } catch (IOException ex) {
  pool.shutdown();
  }
  }
  }
  class Handler implements Runnable {
  private final Socket socket;
  Handler(Socket socket) { this.socket = socket; }
  public void run() {
  // read and service request on socket
  }
  }
  下列方法分两个阶段关闭 ExecutorService.第一阶段调用 shutdown 拒绝传入任务,然后调用 shutdownNow(如有必要)取消所有遗留的任务:
  void shutdownAndAwaitTermination(ExecutorService pool) {
  pool.shutdown(); // Disable new tasks from being submitted
  try {
  // Wait a while for existing tasks to terminate
  if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
  pool.shutdownNow(); // Cancel currently executing tasks
  // Wait a while for tasks to respond to being cancelled
  if (!pool.awaitTermination(60, TimeUnit.SECONDS))
  System.err.println("Pool did not terminate");
  }
  } catch (InterruptedException ie) {
  // (Re-)Cancel if current thread also interrupted
  pool.shutdownNow();
  // Preserve interrupt status
  Thread.currentThread()。interrupt();
  }
  }
  内存一致性效果:线程中向 ExecutorService 提交 Runnable 或 Callable 任务之前的操作happen-before 由该任务所提取的所有操作,后者依次 happen-before 通过 Future.get() 获取的结果。
  从以下版本开始:1.5
  三、方法详细
  1、void shutdown()
  启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
  抛出: SecurityException - 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问。
  2、List shutdownNow() 试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。
  无法保证能够停止正在处理的活动执行任务,但是会尽力尝试。例如,通过 Thread.interrupt() 来取消典型的实现,所以任何任务无法响应中断都可能永远无法终止。
  返回: 从未开始执行的任务的列表
  抛出: SecurityException - 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问。
  3、boolean isShutdown() 如果此执行程序已关闭,则返回 true.
  4、boolean isTerminated() 如果关闭后所有任务都已完成,则返回 true.注意,除非首先调用shutdown 或 shutdownNow,否则 isTerminated 永不为 true.
  5、boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException www.yztrans.com
  请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。
  参数:timeout - 最长等待时间
  unit - timeout 参数的时间单位
  返回:如果此执行程序终止,则返回 true;如果终止前超时期满,则返回 false
  抛出:InterruptedException - 如果等待时发生中断
  6、 Future submit(Callable task)
  提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future.该 Future 的 get 方法在成功完成时将会返回该任务的结果。
  如果想立即阻塞任务的等待,则可以使用 result = exec.submit(aCallable)。get(); 形式的构造。
  注:Executors 类包括了一组方法,可以转换某些其他常见的类似于闭包的对象,例如,将 PrivilegedAction 转换为Callable 形式,这样就可以提交它们了。
  参数: task - 要提交的任务
  返回: 表示任务等待完成的 Future
  抛出: RejectedExecutionException - 如果任务无法安排执行
  NullPointerException - 如果该任务为 null
  7、 Future submit(Runnable task, T result)
  提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future.该 Future 的 get 方法在成功完成时将会返回给定的结果。
  参数: task - 要提交的任务 result - 返回的结果
  返回: 表示任务等待完成的 Future
  抛出: RejectedExecutionException - 如果任务无法安排执行
  NullPointerException - 如果该任务为 null
  8、Future submit(Runnable task)
  提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future.该 Future 的 get 方法在成功 完成时将会返回null.
  参数:task - 要提交的任务
  返回:表示任务等待完成的 Future
  抛出:RejectedExecutionException - 如果任务无法安排执行
  NullPointerException - 如果该任务为 null
  9、 List> invokeAll(Collection> tasks) throws InterruptedException
  执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 Future 列表。返回列表的所有元素的 Future.isDone() 为true.注意,可以正常地或通过抛出异常来终止已完成 任务。如果正在进行此操作时修改了给定的 collection,则此方法的结果是不确定的。
  参数:tasks - 任务 collection
  返回:表示任务的 Future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同,每个任务都已完成。
  抛出:InterruptedException - 如果等待时发生中断,在这种情况下取消尚未完成的任务。
  NullPointerException - 如果任务或其任意元素为 null www.jamo123.com
  RejectedExecutionException - 如果所有任务都无法安排执行
  10、 List> invokeAll(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException
  执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 Future 列表。返回列表的所有元素的 Future.isDone() 为true.一旦返回后,即取消尚未完成的任务。注意,可以正常地或通过抛出异常来终止已完成 任务。如果此操作正在进行时修改了给定的 collection,则此方法的结果是不确定的。
  参数:tasks - 任务 collection timeout - 最长等待时间 unit - timeout 参数的时间单位 www.lefeng123.com
  返回:表示任务的 Future 列表,列表顺序与给定任务列表的迭代器所生成的顺序相同。如果操作未超时,则已完成所有任务。如果确实超时了,则某些任务尚未完成。
  抛出:InterruptedException - 如果等待时发生中断,在这种情况下取消尚未完成的任务
  NullPointerException - 如果任务或其任意元素或 unit 为 null
  RejectedExecutionException - 如果所有任务都无法安排执行
  11、 T invokeAny(Collection> tasks) throws InterruptedException, ExecutionException
  执行给定的任务,如果某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。如果此操作正在进行时修改了给定的 collection,则此方法的结果是不确定的。
  参数:tasks - 任务 collection
  返回:某个任务返回的结果
  抛出:InterruptedException - 如果等待时发生中断
  NullPointerException - 如果任务或其任意元素为 null
  IllegalArgumentException - 如果任务为空
  ExecutionException - 如果没有任务成功完成
  RejectedExecutionException - 如果任务无法安排执行
  12、 T invokeAny(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
  执行给定的任务,如果在给定的超时期满前某个任务已成功完成(也就是未抛出异常),则返回其结果。一旦正常或异常返回后,则取消尚未完成的任务。如果此操作正在进行时修改了给定的 collection,则此方法的结果是不确定的。
  参数: tasks - 任务 collection timeout - 最长等待时间 unit - timeout 参数的时间单位
  返回: 某个任务返回的结果
  抛出: InterruptedException - 如果等待时发生中断
  NullPointerException - 如果任务或其任意元素或 unit 为 null
  TimeoutException - 如果在所有任务成功完成之前给定的超时期满
  ExecutionException - 如果没有任务成功完成
  RejectedExecutionException - 如果任务无法安排执行

java中ExecutorService接口的更多相关文章

  1. JAVA中限制接口流量、并发的方法

    JAVA中限制接口流量可以通过Guava的RateLimiter类或者JDK自带的Semaphore类来实现,两者有点类似,但是也有区别,要根据实际情况使用.简单来说, RateLimiter类是控制 ...

  2. java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  3. 第五节:详细讲解Java中的接口与继承

    前言 大家好,给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢 什么是接口(interface) 接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象 interface ...

  4. java中map接口hashMap以及Enty之间的用法和关系

    java中map接口hashMap以及Enty之间的转换 首先说的是map接口: Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value ...

  5. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

  6. Java 中的接口有什么作用?以及接口和其实现类的关系?

    Java 中的接口有什么作用? - Ivony的回答 - 知乎 https://www.zhihu.com/question/20111251/answer/16585393 这是一个初学者非常常见的 ...

  7. java中的接口interface

    关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...

  8. Java中的接口

    1.接口概念 <1>接口可以理解一种特殊的类,由全局常量和公共的抽象方法所组成 <2>类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不必关心这些类的内部数据,也 ...

  9. java中set接口的用法

    java中的set接口有如下的特点: 不允许出现重复元素: 集合中的元素位置无顺序: 有且只有一个值为null的元素. 因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特 ...

随机推荐

  1. jQuey事件委托

    javascript的事件模型,采用"冒泡"模式,子元素的事件会逐级向上"冒泡",成为父元素的事件. 在需要为较多的元素绑定事件时应该使用事件委托 event ...

  2. 构建你的第一个App

    Building Your First App 原文链接:http://developer.android.com/training/basics/firstapp/index.html 译文链接1: ...

  3. 酷派D530刷机指引

    酷派D530是我的第一台智能手机,刚入手的时候是挺激动的,什么Root啦,精简系统删官方应用啦,app2sd啦,杂七杂八的应用装了一堆,折腾得不亦乐乎.但过了那个热度之后,现在我对于智能手机的要求还是 ...

  4. 【转载】B树、B-树、B+树、B*树都是什么

    1. B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如 ...

  5. 使用 Make 命令构建网站

    网站开发正变得越来越专业,涉及到各种各样的工具和流程,迫切需要构建自动化. 所谓”构建自动化”,就是指使用构建工具,自动实现”从源码到网页”的开发流程.这有利于提高开发效率.改善代码质量. 本文介绍如 ...

  6. python:文本文件处理

    # coding=utf-8 #将列表写入文件 :'w+'(覆盖原有文件内容),'a+'(在原文件的基础上追加) def write_list_test(path,savelist,pattarn): ...

  7. Java程序打包

    包名为 com.longneo.data,主程序入口为:com.longneo.data.AppMain 1.到工程目录下 /bin 执行 jar -cvf Demo.jar com 执行完之后会生成 ...

  8. Gradle构建Java Web应用(转)

    转自:http://www.blogjava.net/jiangshachina/archive/2014/02/03/409285.html 本文是发布在java.net上的一篇摘自于<Gra ...

  9. 合泰 HT66F30 定时器初始化

    #define TM0_RUN (0<<7) //TM0运行 #define TM0_PAUST (1<<7) //TM0暂停 #define TM0_DIV4 (0<& ...

  10. Interpolator 插值器

    简介 Interpolator:撺改者,校对机,分类机,插补器 Interpolator 定义了动画的变化速度,可以实现匀速.正加速.负加速.无规则变加速等,这使得基本的动画得以实现加速.减速等效果. ...