文档章节

读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们

Hi徐敏
 Hi徐敏
发布于 2015/11/11 17:42
字数 1008
阅读 733
收藏 19

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。

欢迎star、fork,读书笔记系列会同步更新

git

https://github.com/xuminwlt/j360-jdk

module

j360-jdk-thread/me.j360.jdk.concurrent

本系列分4篇

1、读书笔记之《Java并发编程的艺术》-并发编程基础

2、读书笔记之《Java并发编程的艺术》-java中的锁

3、读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

4、读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们


本书前三章分别为

  1. 并发编程的挑战,也就是并发编程的缘由所在

  2. 底层的实现原理

  3. java内存模型

分别从cpu x86,x64以及内存模型等概念中描述java对并发编程的实现和控制,概念较为底层和基础,读书笔记略过前三章直接从第四章应用实现及原理基础开始。

章节

  1. 并发编程基础

  2. java中的锁

  3. 并发容器和框架(重点)

  4. 13个操作原子类

  5. java并发工具类

  6. 线程池

  7. Execurot框架

内容

写到第六七节终于有点小激动了,因为到这里结束就意味着可以开开心心的去写高并发底层了,但实际上开发中用到最多的还是线程池的设计和并发Executor的使用,在下一节会对这两节的内容用一套完整的框架来实践线程池和Executor的使用案例,其实还有一本书《七周七并发模型》第一个模型几乎就把这本书完整的知识点概括完了,但是因为作者针对的面不同,并发模型这本书更多的讲述如何用好并发框架,达到最优的效果,并发编程的艺术更多的是介绍原理和概念,一并起来看收获匪浅。

好了,再来复习下线程池吧,在之前的线程池的设计中使用的是jdk5之前的设计思路,在jdk5之后使用并发框架实现的线程池将会容易的多,但是性能和效率却好得多。

6、线程池

先看一张ThreadPoolExecutor执行execute方法的执行示意图

执行方法分4种情况

  1. 如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(这一个过程需要获取全局锁)

  2. 如果当前运行线程数等于或者多余corePoolSize,则加入到队列BlockQueue

  3. 如果无法加入到BlockQueue(队列已满),则创建新的线程来处理任务,(需要获取全局锁)

  4. 如果创建的线程将使得当前运行的线程数量大于MaximunPoolSize,任务将被拒绝,并调用非常重要的RejuectExecutionHandler.rejectExecution()方法

线程池的创建
new ThreadPoolExecutor(corePoolSize,maximunPoolSize,keepAliveTime,milliseconds,runnableTaskQueue,handler);

共6个参数

  1. corePoolSize,线程池的基本大小

  2. runnableTaskQueue:用于保存等待执行的任务的阻塞队列,可以有以下选择

    1. ArrayBlockingQueue

    2. LinkedBlockingQueue

    3. synchronousQueue

    4. priorityBlockingQueue

  3. maximumPoolSze:线程池最大数量

  4. ThreadFacotry:用于设置创建线程的工厂

  5. RejectedExecutionHandler:饱和策略

  6. keepAliveTime:线程保持活动的时间

  7. TimeUtil:线程保持活动的单位

线程池提交任务

分别为execute()/submit()

threadPool.execute(new Runnable(){
    @override
    public void run(){
        //run
    }
})
Future<Object> future = executor.submit(harReturnValuetask);
try{
 Object s = futrue.get();
}catch(InterruptedException e){
}catch(ExecutionException e){
}finally{
 //关闭线程池
 executor.shutdown();
}
关闭线程池

shutdown()、shutdownNow()

线程池的监控

taskCount、completedTaskCount、largestPoolSize、getpoolSize,getActiveCount

通过重写线程池的beforeExecutor、afterExecutor、terminated方法


7、Executor框架

Executor框架由3大部分组成

  1. 任务:被执行任务需要实现的接口Runnable、Callable

  2. 任务的进行:任务执行机制的核心接口Executor,继承Executor的ExecutorService

  3. 异步计算的结果:Future和实现了Future接口的FutureTask类

Execurot是Executor框架的基础,将任务的提交和任务的执行分离开来




© 著作权归作者所有

Hi徐敏
粉丝 124
博文 40
码字总数 67954
作品 0
静安
架构师
私信 提问
加载中

评论(1)

草熘最新2015
学习了
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
3.9K
8
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
685
1
读书笔记之《Java并发编程的艺术》-java中的锁

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
395
0
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
Java多线程学习(八)线程池与Executor 框架

Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/JavaGuide 历史优质文章推荐: Java并发编程指南专栏 分布式系统的经典基础理...

snailclimb
2018/05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mac下redis安装、设置、启动停止

常用命令说明 redis服务器:redis-server redis客户端:redis-cli redis性能测试工具:redis-benchmark AOF文件修复工具:redis-check-aof RDB文件修复工具:redis-check-rd redis设置临时密...

botkenni
6分钟前
1
0
好程序员web前端分享HTML5常见面试题集锦四

好程序员web前端分享HTML5常见面试题集锦四 1、为什么要初始化CSS样式? 答案:因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面...

好程序员官方
7分钟前
1
0
CDN的网络架构是什么?

CDN网络架构主要由两大部分,分为中心和边缘两部分,中心指CDN网管中心和DNS重定向解析中心,负责全局负载均衡,设备系统安装在管理中心机房,边缘主要指异地节点,CDN分发的载体,主要由Cac...

云漫网络Ruan
7分钟前
1
0
pandas入门07---可视化

01 入门 制作提供信息的可视化是数据分析的重要任务之一。首先介绍一下matplotlib库。 import matplotlib.pyplot as pltimport numpy as npdata = np.arange(10)print(data)plt.plot(da...

筠初
8分钟前
1
0
201_PyTorch中文教程:Torch与Numpy互操作

201_PyTorch中文教程:Torch与Numpy互操作 更多参考: https://morvanzhou.github.io/tutorials/ 油管频道:https://www.youtube.com/user/MorvanZhou 依赖软件包: torch numpy Torch的更多数......

openthings
8分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部