JDK源码分析之concurrent包(一) -- Executor架构
Java5新出的concurrent包中的API,是一些并发编程中实用的的工具类。在高并发场景下的使用非常广泛。笔者在这做了一个针对concurrent包中部分常用类的源码分析系列。本系列针对的读者是已经对并发包中的Executor框架和工具类有所了解并懂得如何使用的人群,如果对并发包还不了解的朋友,请先做些了解。网上对这方面的讲述有丰富的资源。
本篇博文是第一期,首先对Executor架构做一个概述。这里只简单介绍接口和类的继承、使用关系。
盗用一张类图来描述结构:

解析:
- Executor是总的接口,用来执行Runnable任务;
- ExecutorService是Executor的扩展接口,主要扩展了执行Runnable或Callable任务的方式,及shutdown的方法;
- ScheduledExecutorService是ExecutorService的扩展接口,主要扩展了可以用任务调度的形式(延迟或定期)执行Runnable或Callable任务;
- AbstractExecutorService是ExecutorService接口的实现类,是抽象类,提供一些默认的执行Runnable或Callable任务的方法;
- ThreadPoolExecutor是AbstractExecutorService的子类,是线程池的实现;
- ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,实现ScheduledExecutorService接口,基于线程池模式的多任务调度,是Timer工具类的高性能版;
- Callable与Future是Runnable的另外的形式,用来异步获取任务执行结果;
- 最后,Executors是工具类,用于创建上述各种实例。
此外,CompletionService接口可以认为是Executor的一个分支,注意这里CompletionService并不是Executor的子接口,上图可能会让部分读者产生歧义。CompletionService是用来将生产新的异步任务与使用已完成任务的结果分离开来的服务。基于Executor的任务执行,与Future搭配使用。
对Executor框架的结构做了简单的描述之后,接下来就要进入源码解析的正篇部分了。这里笔者计划重点对框架中的ThreadPoolExecutor、FutureTask及一些工具类如Exchanger、CountDownLatch、CyclicBarrier、Semaphore和几个常用的并发集合如ArrayBlockingQueue、ConcurrentLinkedQueue、ConcurrentHashMap、CopyOnWriteArrayList做分析。
一个人的理解难免有片面和遗漏,还望各位海涵和指正。
JDK源码分析之concurrent包(一) -- Executor架构的更多相关文章
- JDK源码分析之concurrent包(三) -- Future方式的实现
上一篇我们基于JDK的源码对线程池ThreadPoolExecutor的实现做了分析,本篇来对Executor框架中另一种典型用法Future方式做源码解读.我们知道Future方式实现了带有返回值的 ...
- JDK源码分析之concurrent包(二) -- 线程池ThreadPoolExecutor
上一篇我们简单描述了Executor框架的结构,本篇正式开始并发包中部分源码的解读. 我们知道,目前主流的商用虚拟机在线程的实现上可能会有所差别.但不管如何实现,在开启和关闭线程时一定会耗费很多CPU ...
- JDK源码分析之concurrent包(四) -- CyclicBarrier与CountDownLatch
上一篇我们主要通过ExecutorCompletionService与FutureTask类的源码,对Future模型体系的原理做了了解,本篇开始解读concurrent包中的工具类的源码.首先来看两 ...
- JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue
JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue 目的:本文通过分析JDK源码来对比ArrayBlockingQueue 和LinkedBlocki ...
- JDK 源码分析(4)—— HashMap/LinkedHashMap/Hashtable
JDK 源码分析(4)-- HashMap/LinkedHashMap/Hashtable HashMap HashMap采用的是哈希算法+链表冲突解决,table的大小永远为2次幂,因为在初始化的时 ...
- JDK源码分析(三)—— LinkedList
参考文档 JDK源码分析(4)之 LinkedList 相关
- JDK源码分析(一)—— String
dir 参考文档 JDK源码分析(1)之 String 相关
- JDK源码分析(2)LinkedList
JDK版本 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. LinkedList 实现 ...
- 【JDK】JDK源码分析-LinkedHashMap
概述 前文「JDK源码分析-HashMap(1)」分析了 HashMap 主要方法的实现原理(其他问题以后分析),本文分析下 LinkedHashMap. 先看一下 LinkedHashMap 的类继 ...
随机推荐
- Request to https://bower.herokuapp.com failed with 502
bower 版本过低,需要升级为最新bower版本, 如果升级版本后依然无法使用,更改.bowerrc配置,如下所示 { "directory": "bower_comp ...
- MongoDB Database Profiler
数据库profiler细粒度收集mongodb的写操作.游标.数据库命令等.可以在数据库级别或者实例级别开启profiling. profiler将收集到的数据写入system.profile集合中. ...
- 纯div+css制作的弹出菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java 解析webservice 中的soapheader
//从MessageContet中获取头域中的值 public HeaderBean getBeanFromRequest(org.apache.axis2.context.MessageContex ...
- JPA(二):EntityManager
上述我们知道什么是JPA了,接下来这篇文章就主要为大家介绍JPA的一个重要内容:EntityManager.不论什么对实体的操作都是通过它来完毕的. 先来说说什么是EntityManager.顾名思义 ...
- react-native在win10下用adb报错的解决方案
react-native在WIN10上面运行用adb链接模拟器,会直接在powershell里报错, 报错大概意思是识别不了adb这个cmdlet函数. 找了很久的解决办法,直接找到adb.exe所在 ...
- Java - web.xml文件中可以配置哪些内容?
web.xml用于配置Web应用的相关信息,如:监听器(listener).过滤器(filter).Servlet.相关参数.会话超时时间.安全验证方式.错误页面等,下面是一些开发中常见的配置: ①配 ...
- iOS swift HandyJSON组合Alamofire发起网络请求并转换成模型
在swift开发中,发起网络请求大部分开发者应该都是使用Alamofire发起的网络请求,至于请求完成后JSON解析这一块有很多解决方案,我们今天这里使用HandyJSON来解析请求返回的数据并转化成 ...
- 每隔10秒自动更新svn 定时更新svn 脚本
任务: */1 * * * * /opt/adobe/fms/webroot/api/svn.sh 这个命令的问题:只更新了版本号,没有更新实际内容,但是直接运行上面shell脚本能更新. 解决:需要 ...
- Android显示GIF动画(转载)
GifView 是一个为了解决android中现在没有直接显示gif的view,只能通过mediaplay来显示这个问题的项目,其用法和 ImageView一样,支持gif图片 使用方法: 1-把Gi ...