ThreadPoolExecutor 的基本原理

Posted zjm-1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThreadPoolExecutor 的基本原理相关的知识,希望对你有一定的参考价值。

先说下 ThreadPoolExecutor 的基本原理:
1. 当提交一个任务时,如果线程数没有达到coreSize,那么就会新建一个线程,并绑定该任务,直到数量到达coreSize前都不会重用之前的线程
2.到达后,提交的任务都会放到一个等待队列中进行等待,线程池中的线程会使用take()阻塞的从等待队列拿任务
3.当队列有界,并且线程不能及时取走队列中的任务,等待队列有可能会满,那么线程池将会创建临时线程来执行任务
4.临时线程 通过poll(keepAliveTime,timeUnit)来执行任务,如果到了keepAliveTime还取不到,那么会被回收掉,临时线程的数量不能大于
maxPoolSize - coreSize
5.当线程数到达maxSize后,将会执行拒绝策略RejectedExecutionHandler,包括抛异常,静默拒绝,抛弃最old任务,使用原远程执行等策略

知道了原理你大概就知道线程被如何管理了
当一个task执行完,如果线程数小于coreSize,那么这个线程就会一直存在线程池中,
如果是临时线程,在等待keepAliveTime后,将会被回收掉

以上是关于ThreadPoolExecutor 的基本原理的主要内容,如果未能解决你的问题,请参考以下文章

线程池基本使用和ThreadPoolExecutor核心原理讲解

线程池作用及基本原理(简略)

Java并发编程:Java线程池核心ThreadPoolExecutor的使用和原理分析

线程池详解(ThreadPoolExecutor)

线程池ThreadPoolExecutor实现原理

JDK ThreadPoolExecutor核心原理与实践