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架构的更多相关文章

  1. JDK源码分析之concurrent包(三) -- Future方式的实现

    上一篇我们基于JDK的源码对线程池ThreadPoolExecutor的实现做了分析,本篇来对Executor框架中另一种典型用法Future方式做源码解读.我们知道Future方式实现了带有返回值的 ...

  2. JDK源码分析之concurrent包(二) -- 线程池ThreadPoolExecutor

    上一篇我们简单描述了Executor框架的结构,本篇正式开始并发包中部分源码的解读. 我们知道,目前主流的商用虚拟机在线程的实现上可能会有所差别.但不管如何实现,在开启和关闭线程时一定会耗费很多CPU ...

  3. JDK源码分析之concurrent包(四) -- CyclicBarrier与CountDownLatch

    上一篇我们主要通过ExecutorCompletionService与FutureTask类的源码,对Future模型体系的原理做了了解,本篇开始解读concurrent包中的工具类的源码.首先来看两 ...

  4. JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue

    JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue 目的:本文通过分析JDK源码来对比ArrayBlockingQueue 和LinkedBlocki ...

  5. JDK 源码分析(4)—— HashMap/LinkedHashMap/Hashtable

    JDK 源码分析(4)-- HashMap/LinkedHashMap/Hashtable HashMap HashMap采用的是哈希算法+链表冲突解决,table的大小永远为2次幂,因为在初始化的时 ...

  6. JDK源码分析(三)—— LinkedList

    参考文档 JDK源码分析(4)之 LinkedList 相关

  7. JDK源码分析(一)—— String

    dir 参考文档 JDK源码分析(1)之 String 相关

  8. JDK源码分析(2)LinkedList

    JDK版本 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. LinkedList 实现 ...

  9. 【JDK】JDK源码分析-LinkedHashMap

    概述 前文「JDK源码分析-HashMap(1)」分析了 HashMap 主要方法的实现原理(其他问题以后分析),本文分析下 LinkedHashMap. 先看一下 LinkedHashMap 的类继 ...

随机推荐

  1. unity, rigidbody实现瞬移必须勾选is Kinematic

    用itween让一个绑定了rigidbody的沿曲线移动,当移动到末端时瞬间返回起始状态重新播放. 发现在不勾选isKinematic的情况下是不可能实现上述需求的.因为在动力学模式下任何物体的位置和 ...

  2. 点滴积累【C#】---将Excel数据导入到数据库

    本文修改来源:http://www.cnblogs.com/chenyuming507950417/p/3169267.html 假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: ...

  3. android实现下拉框(spinner),自己定义大小颜色背景位置,去掉默认样式黑边

    1. 实现最简单的spinner xml文件,有一个TextView,一个Spinner: <RelativeLayout xmlns:android="http://schemas. ...

  4. CvSplit

    /* possible split in the tree */ typedef struct CvSplit { CvTreeCascadeNode* parent; CvTreeCascadeNo ...

  5. 解决国内gem不能用的问题

    转自:http://www.haorooms.com/post/gem_not_use 最近在安装SASS的时候,用到gem命令,但是运行出行如下错误! C:\Users\len>gem ins ...

  6. 0054 Spring MVC的@Controller和@RequestMapping注解

    @Controller注解 该注解用来指示一个类是一个控制器,在Spring的配置xml文件中开启注解扫描 <context:conponent-scan base-package=" ...

  7. windows server 2003下搭建amp环境

    参考: http://blog.csdn.net/binyao02123202/article/details/7578914 http://4359260.blog.51cto.com/434926 ...

  8. 分享 stormzhang的Andoid学习之路

    硬件 电脑–推荐Mac 首先声明我不是果粉,个人Windows,Linux,Mac OX系统均用过, 只能说Windows上面的开发工具简直难以恭维,尤其命令行超级难用,而Linux自己必须得花不少时 ...

  9. UVALive 3942 Remember the Word 字典树+dp

    /** 题目:UVALive 3942 Remember the Word 链接:https://vjudge.net/problem/UVALive-3942 题意:给定一个字符串(长度最多3e5) ...

  10. HBase学习笔记——Java API操作

    1.1.  配置 HBaseConfiguration 包:org.apache.hadoop.hbase.HBaseConfiguration 作用:通过此类可以对HBase进行配置 用法实例: C ...