前言 这篇主要讲述ThreadPoolExecutor的源码分析,贯穿类的创建、任务的添加到线程池的关闭整个流程,让你知其然所以然。希望你可以通过本篇博文知道ThreadPoolExecutor是怎么添加任务、执行任务的,以及延伸的知识点。那么先来看看ThreadPoolExecutor的继承关系吧 ...
分类:
编程语言 时间:
2018-07-02 14:13:38
阅读次数:
141
ThreadPoolExecutor是JDK内置的线程池实现类,最初随JDK1.5发布。最近花了点时间看了下ThreadPoolExecutor的源码,JDK版本是JDK1.8.0_71。 整体结构 外部循环带有一个 标签,而内部循环可以是正常退出,也可以是在外层循环框架下执行break、conti ...
分类:
其他好文 时间:
2018-06-05 23:25:47
阅读次数:
194
几句闲扯:首先,我想说java的线程池真的是很绕,以前一直都感觉新建几个线程一直不退出到底是怎么实现的,也就有了后来学习ThreadPoolExecutor源码。学习源码的过程中,最恶心的其实就是几种状态的转换了,这也是ThreadPoolExecutor的核心。花了将近小一周才大致的弄明白Thre ...
分类:
编程语言 时间:
2018-06-02 21:26:01
阅读次数:
198
execute方法示意图如上,workers为HashSet类型,存储初始化任务RUNNING或SHUTDOWN但firsttask为null的worker。 workQueue为BlockingQueue,存储提交的执行任务。 ...
分类:
编程语言 时间:
2018-05-20 13:02:28
阅读次数:
147
一、什么是线程池 为什么要使用线程池?在多线程并发开发中,线程的数量较多,且每个线程执行一定的时间后就结束了,下一个线程任务到来还需要重新创建线程,这样线程数量特别庞大的时候,频繁的创建线程和销毁线程需要一定时间而且增加系统的额外开销。基于这样的场景,线程池就出现了,线程池可以做到一个线程的任务处理 ...
分类:
编程语言 时间:
2018-03-21 23:20:41
阅读次数:
289
一、前言 JUC这部分还有线程池这一块没有分析,需要抓紧时间分析,下面开始ThreadPoolExecutor,其是线程池的基础,分析完了这个类会简化之后的分析,线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包 ...
分类:
编程语言 时间:
2018-03-11 23:09:47
阅读次数:
205
相比1.6,1.7有些变化: 1、 增加了一个TIDYING状态,这个状态是介于STOP和TERMINATED之间的,如果执行完terminated钩子函数后状态就变成TERMINATED了; 2、 内部类Worker继承了AQS类作为一个独享锁,在运行每个任务前会获取自己的锁; 3、 runSta ...
分类:
编程语言 时间:
2017-12-28 13:59:24
阅读次数:
239
在源码解析前,需要先理清线程池控制的运行状态,以及运行状态之间的任务调度 线程池控制状态(ctl ,原子操作 ,来自包java.util.concurrent.atomic ,保证线程并发安全),分为两大类:workerCount(当前运行的线程数) runState(当前线程的运行状态) 1、ru ...
分类:
其他好文 时间:
2017-10-17 23:05:31
阅读次数:
399
引言为什么引入线程池技术?对于服务端的程序,经常面对的是执行时间较短、工作内容较为单一的任务,需要服务端快速处理并返回接口。假若服务端每次接收到一个任务,就创建一个线程,然后执行,这种方式在原型阶段是...
分类:
其他好文 时间:
2016-12-13 13:55:55
阅读次数:
292
在JUC包中,线程池部分本身有很多组件,可以说是前面所分析的各种技术的一个综合应用。从本文开始,将综合前面的知识,逐个分析线程池的各个组件。
-Executor/Executors
-Thread...
分类:
编程语言 时间:
2016-09-30 09:58:32
阅读次数:
270