线程池ThreadPoolExecutor学习

时间:2019-12-02 23:54:57   收藏:0   阅读:172

在阅读vitamin的heartbeat功能时,内部实现使用到了Java中的threadpoolExecutor ,这里对自己学习到的一些知识做一些总结

线程池的目的与使用的背景:在并发请求数量非常多,但是处理的时间又比较短,开销主要在线程的生成和销毁上时,线程池就能很好的派上用场

 

Java中的线程池是用ThreadPoolExecutor类来实现的,以下是主要的类图

技术分享图片

 

主要了解线程的创建、管理以及后台任务的调度等方面的执行原理。结合这些 去理解heartbeat中的代码

首先heatbeat中的成员变量:

技术分享图片

 

存在于executor相关的两个接口,首先解释这两个接口的含义:

 

初始化代码中 sendHeartbeatService 和 processHeartbeatService 都用了ThreadPoolExecutor构造方法初始化

 

技术分享图片

这里需要理解这个ThreadPoolExecutor构造方法才能理解各个参数的含义:

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

这里面有一个重要的逻辑需要了解:execute 方法执行一个线程时,是有一个调度过程的,会根据corePoolSize 、队列是否阻塞和maximumPoolSize这些参数进行判断,是否创建新线程执行还是到队列里等待

等,下面是流程图

技术分享图片

 

 

原文:https://www.cnblogs.com/xierunfang/p/11973212.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!