Java并发编程的艺术(十一)——Executor与线程池
Executor框架简介
从JDK5开始,把工作单元和执行机制分离开来了,工作的单元包括Runnable和Callable,执行机制就是由Executor框架提供。
Executor两级调度模型
HotSpot虚拟机将Java线程映射为操作系统的线程。
在上层,Java多线程程序将应用分解为多个任务,然后由用户级的调度器Executor将这些任务映射为固定数量的线程。
在底层,操作系统将这些线程映射到硬件处理器上。

Executor结构与成员
结构由三大部分组成:
- 任务:包括被执行任务所需要实现的接口:Runnable, Callable。
- 任务的执行:核心接口时Executor,以及继承了它的ExecutorService接口。ExecutorService有两个关键类,ThreadPoolExecutor和ScheduledThreadPoolExecutor。
- 执行结果:包括Future接口及其实现类FutureTask。

线程池相关
1.FixedThreadPool

代码实现
public static ExecutorService newFixedThreadPool(int nThreads){
return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
}
这里把keepAliveTime设置为0L,超过核心数的多余的线程会立即停止。
特点
- 线程数固定。
- corePoolSize和maximunPoolSize都为用户设定的线程数量nThreads,则超出无法创建超出核心数量的工作线程。
- 堵塞队列采用LinkedBlockingQueue,无界队列。
- 采用无界队列,就不会拒绝任务,同时maximumPoolSize和keepAliveTime参数将无效。
2.SingleThreadPool

使用方法
public static ExecutorService newSingleThreadExecutor(){
return new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
}
特点
- 只有一条工作线程。
- 采用阻塞队列为LinkedBlockingQueue。
3.CachedThreadPool

代码实现
public static ExecutorService newCachedThreadPool(){
return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.MILLISECONDS, new SynchronousQueue<Runnable>());
}
特点
- 可以无限扩大。
- 适合处理执行时间小任务。
- 核心线程数为0,而最大线程数无限大,这样线程数量可以无限扩大。
- 超时时间时60s,这样空闲线程等待60秒后就会被销毁。
- 阻塞队列采用SynchronousQueue。这个队列没有存储空间,所以,如果有任务到来,就不会被入队,直接新建线程拿去运行。
4.ScheduledThreadPool

特点
- 用于执行延时或者定时任务
- 采用DelayQueue阻塞队列,内部其实由PriorityQueue实现,并根据时间排序,时间相同则根据序号排序,也是无界队列。
- 需要确定任务开始时间,任务序列号,任务执行的时间间隔。
- 如果是周期任务,则执行完又放回队列。
Java并发编程的艺术(十一)——Executor与线程池的更多相关文章
- Java并发编程的艺术(十一)——线程池(2)
Executor两级调度模型 在HotSpot虚拟机中,Java中的线程将会被一一映射为操作系统的线程. 在Java虚拟机层面,用户将多个任务提交给Executor框架,Executor负责分配线程执 ...
- Java并发编程(三)什么是线程池
什么是线程池 学习编程的小伙伴们会经常听到“线程池”.“连接池”这类的词语,可是到底“池”是什么意思呢?我讲个故事大家就理解了:在很久很久以前有一家银行,一年之中只有一个客户来办理业务,随着时间的推移 ...
- Java并发编程(八):线程调度——线程池
new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { / ...
- 【java并发编程实战】第八章:线程池的使用
1.线程饥饿锁 定义:在线程池中,如果任务的执行依赖其他任务,那么可能会产生线程饥饿锁.尤其是单线程线程池. 示例: public class ThreadDeadStarveTest { publi ...
- Java并发编程的艺术(七)——线程间的通信
为什么需要线程间通信 让线程之间合作,提高运行效率. volatile和synchronized关键字 实现原理 这两个方式都是采用共享内存的方式进行通信,通过同步机制保证数据可见性和排他性. 特点 ...
- Java并发编程的艺术(五)——线程和线程的状态
线程 什么是线程 操作系统调度的最小单元就是线程,也叫轻量级进程. 为什么要使用多线程 多线程程序能够更有效率地利用多处理器核心. 用户响应时间更快. 方便程序员将程序模型映射到Java提供的多线程编 ...
- 那些年读过的书《Java并发编程实战》和《Java并发编程的艺术》三、任务执行框架—Executor框架小结
<Java并发编程实战>和<Java并发编程的艺术> Executor框架小结 1.在线程中如何执行任务 (1)任务执行目标: 在正常负载情况下,服务器应用 ...
- 读《Java并发编程的艺术》(一)
离开博客园很久了,自从找到工作,到现在基本没有再写过博客了.在大学培养起来的写博客的习惯在慢慢的消失殆尽,感觉汗颜.所以现在要开始重新培养起这个习惯,定期写博客不仅是对自己学习知识的一种沉淀,更是在督 ...
- Java并发编程的艺术读书笔记(2)-并发编程模型
title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...
随机推荐
- ceph的pg的分布的快速查看
前言 本篇的内容实际上是另外一篇文章的字篇章,在另外一篇文章当中,将会对crush的分布的调整的做一次总结,用比较简单的方式来展示各种crush的区别 在做这个工作过程中,为了更好的能展示出效果,就有 ...
- rinetd小工具
一.介绍 tcp端口转发工具,针对ip:port的 连接进行转发.重点开源,且配置简单.不支持ftp,因为ftp要使用多个端口. 1.转发规则 [root@master tmp]# cat a.con ...
- 图创图书管理SQL注入漏洞
payload root@kali:~# sqlmap -u http://2*0.*6.***.3:8080/opac/recommend/recommendBookList/list --data ...
- php获取字符串长度
function len($zfc){ $arr = []; $len = mb_strlen($zfc); for ($i = 0; $i < $len; $i++) { array_push ...
- NLP之统计句法分析(PCFG+CYK算法)
一.认识句法分析 首先,了解一下句法分析到底是什么意思?是做什么事情呢?顾名思义,感觉是学习英语时候讲的各种句法语法.没错!这里就是把句法分析过程交给计算机处理,让它分析一个句子的句法组成,然后更好理 ...
- 面试老被问LinkedList源码?看看阿里技术官是怎么深度剖析的吧!
前言 LinkedList底层是基于双向链表,链表在内存中不是连续的,而是通过引用来关联所有的元素,所以链表的优点在于添加和删除元素比较快,因为只是移动指针,并且不需要判断是否需要扩容,缺点是查询和遍 ...
- 基于gin的golang web开发:永远不要相信用户的输入
作为后端开发者我们要记住一句话:"永远不要相信用户的输入",这里所说的用户可能是人,也可能是另一个应用程序."永远不要相信用户的输入"是安全编码的准则,也就是说 ...
- jenkins、gitlab配置CI/CD
1. 在gitlab中创建好项目(gitlab的安装和基本使用这里不在说明) 2. 创建jenkins任务 jenkins 需要几个插件请先安装好 - Git plugin - GitLab Plug ...
- MarkDown使用之LaTeX表示数学公式
对于文本排版格式,对于\(Microsoft\,Word\)来说,功能尽全,可调的参数十分多,人们可能会将不少的时间放在具体的文字大小.实现样式.而\(markdown\)语法能够让人们通过符号去替代 ...
- Mybatis【1】-- 第一个Mybatis程序
1.框架是什么 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架.前者是从应用方面而后者是从目的方面 ...