Executor框架是java 5 中引入的,内部使用了线程池机制。Executor框架包括:Executor, ExecutorService,Executors,ThreadPoolExecutor等。

Executor ——接口

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

Executor接口中定义一个方法execute(Runnable command),该方法接收一个Runnable实例,它用来执行一个任务,任务即是一个实现了Runnable接口的类。

ExecutorService——接口

public interface ExecutorService extends Executor {
  void shutdown();
  List<Runnable> shutdownNow();
  boolean isShutdown();
  boolean isTerminated();
  boolean awaitTermination(long timeout, TimeUnit unit)
    throw InterruptedException;
  //...其他用于提交的便利方法
}

ExecutorService继承了Executor的接口,同时提供了更丰富的生命周期管理的方法。ExecutorService的生命周期有3种状态:运行、关闭和已停止。

shutdown方法将执行平缓的关闭过程:不再接受新的任务,同时等待已经提交的任务执行完成——包括哪些还未开始执行的任务。

shutdownNow方法将执行粗暴的关闭过程:它将尝试取消所有运行中的任务,并且不再启动队列中尚未开始执行的任务。

Executors提供工厂方法用于创建线程池

newFixedThreadPool:将创建固定长度的线程池,每提交一个任务就创建一个线程,直到达到线程池的最大数量。(如果某个线程由于发生了未预期的Exception而结束,那么线程池会补充一个新的线程)。
newCachedThreadPool:创建一个可缓存的线程池,如果线程池的当前规模超过了处理需求时,那么将回收空闲的线程,而当需求增加时,则可以添加新的线程,线程池的规模不存在任何限制。
newSingleThreadPool:是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建另一个线程来替代。newSingleTreadPool能确保依照任务在队列中的顺序来串行执行(例如FIFO、LIFO、优先级)
newScheduledThreadPool:创建一个固定长度的线程池,而且以延迟或定时的方式来执行任务。
ThreadPoolExecutor

ThreadPoolExecutor为一些Executor提供了基本的实现,这些Executor是由Executors中newCachedThreadPool、newFixedThreadPool等方法返回的。ThreadPoolExecutor是一个灵活的、稳定的线程池,允许进行各种定制。

public ThreadPoolExecutor(int corePoolSize,//线程池的基本大小
                          int maximumPoolSize,//最大大小
                          long keepAliveTime,//存活时间
                          Timeout unit,
                          SlockingQueue<Runable> workQueue,
                          ThreadFactory threadFactory,
                          RejectExecutionHandler handler){...}

通过调节线程池的基本大小和存活时间,可以帮助线程池回收空闲线程占有的资源。

newFixedThreadPool工厂方法将线程池的基本大小和最大大小设置为参数中指定的值,而且创建的线程池不会超时。
newCachedThreadPool工厂方法将线程池的最大大小设置为Integer.MAX_VALUE,而将基本大小设置为零,并将超时设置为1分钟,这种方式创建出来的线程池可以无限扩展,并且当需求降低会自动收获。
//对通过标准工厂方法创建的Executor进行修改
ExecutorService exec = Execoutors.newCachedThreadPool();
if(exec instanceof ThreadPoolExecutor)
  ((ThreadPoolExecutor) exec).setCorePoolSize(10);
else
  throw new AssertionError(*Oops, bad assumption);

java Executor相关推荐

  1. Java Executor源码解析(3)—ThreadPoolExecutor线程池execute核心方法源码【一万字】

    基于JDK1.8详细介绍了ThreadPoolExecutor线程池的execute方法源码! 上一篇文章中,我们介绍了:Java Executor源码解析(2)-ThreadPoolExecutor ...

  2. Java Executor源码解析(7)—Executors线程池工厂以及四大内置线程池

    详细介绍了Executors线程池工具类的使用,以及四大内置线程池. 系列文章: Java Executor源码解析(1)-Executor执行框架的概述 Java Executor源码解析(2)-T ...

  3. java Executor实例_Executor框架+实例

    Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...

  4. java executor spring_Spring+TaskExecutor实例

    一 TaskExecutor接口 Spring的TaskExecutor接口等同于Java.util.concurrent.Executor接口. 实际上,它存在的主要原因是为了在使用线程池的时候,将 ...

  5. java executor解读_Java-多线程框架Executor解读

    概述 在Java中,使用线程来异步执行任务.Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源.同时,为每一个任务创建一个新线程 ...

  6. java executor 异步_Java并发编程11-异步执行框架Executor

    1 Executor框架的简介 1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦.要执行任务的人只需把Task描述清楚,然后提交即可.这个Task是怎么被执行的,被谁执行的,什么时 ...

  7. java executor spring_java 线程池(ExecutorService与Spring配置threadPoolTaskExecutor)

    一.java ExecutorService实现 创建ExecutorService变量 private ExecutorService executor = null 2.执行对应任务时,首先生成线 ...

  8. Java Executor接口

    版本 JDK8(JDK1.8) Executor接口源码重点 1.Executor接口只定义了一个方法void execute(Runnable command),用于传递一个任务进去,该任务可以在新 ...

  9. java executor 源码_Java线程池ThreadPoolExecutor深度探索及源码解析

    我们的程序里,时常要使用多线程.因此多线程的管理变的尤为重要.ThreadPoolExecutor很好的解决了这一点.本篇文章主要从源码入手,分析ThreadPoolExecutor的原理. 1.标记 ...

最新文章

  1. 51年被发现9次,陶哲轩证明的公式成了重复造轮子?事情并没有这么简单
  2. python读取html_从零开始的Python爬虫教程(一):获取HTML文档
  3. Codeforces Round #717 (Div. 2) D. Cut 倍增
  4. js正则 匹配 正则表达式
  5. 怎样配置键盘最方便,以及一些设计的思考
  6. [Classic] 日文版《出师表》
  7. win7安装硬盘后无法启动计算机,硬盘装Win7系统电脑后开机提示DISK BOOT FAILURE怎么办【图文】...
  8. 深入研究微服务架构——第二部分
  9. power bi 商业智能相关书籍介绍
  10. php设置 url长度,URL长度有限制吗?_PHP教程
  11. 1496.数括号法求广义表深度
  12. 程序员做外包有前途吗?
  13. Attention机制原理
  14. 十二黄金圣斗士阴险程度(爆笑)
  15. ORA-01000-超出打开游标的最大数(解决及原因)
  16. moses中的数据预处理预处理操作
  17. SkinSharp(Skin#)软件换肤库!
  18. keyshot渲染玻璃打光_keyshot8耳机渲染打光教程
  19. 年度规划复盘及一些收获
  20. ArcGIS二次开发入门 一

热门文章

  1. NodeJS学习资料分享
  2. JAVA学习 第三章作业
  3. mhd格式三维图像显示_可视化mhd文件格式的DICOM图像序列
  4. OpenCV3 和 Qt5 计算机视觉:6~10
  5. uni-app卖座电影多端开发纪实(三):MVC
  6. 【日常学习】HTML介绍
  7. mysql80版本连接 1251_解决Navicat Premium 连接 MySQL 8.0 报错1251的问题分析
  8. 数据库函数依赖——完全函数依赖、部分函数依赖、传递函数依赖【通俗易懂,博主会讲人话】
  9. Linux—CRLF/CR/LF等回车换行符问题详解
  10. 幻灯片取消所有动画和切换效果