线程池核心参数详解:corePoolSize和workQueue
2021-03-02 18:36:04 0 举报
AI智能生成
线程池核心参数(corePoolSize/workQueue)
作者其他创作
大纲/内容
阅读导航
线程 👉
CPU+JMM 👉
CAS+Volatile 👉
Synchronized 👉
JUC 👉
线程池
线程池原理 👉
线程池核心参数
线程池高频面试题 👉
ThreadLocal 👉
线程池核心参数
corePoolSize
核心线程数,默认线程池中没线程,等任务来了才创建线程
如调用了预创建线程prestartAllCoreThreads(),线程池会提前创建并启动所有核心线程
maximumPoolSize
如果队列满了,并且已创建的线程数小于最大线程数,则线程池会再创建新的线程执行任务
如果是无界队列则这个参数没有效果
如果是无界队列则这个参数没有效果
keepAliveTime
线程存活时间,该参数只有在线程数大于 corePoolSize 时才会生效
unit
keepAliveTime 的单位。TimeUnit
workQueue
ArrayBlockingQueue:基于数组结构的有界阻塞队列,FIFO
LinkedBlockingQueue:基于链表结构的有界阻塞队列,FIFO,但是不设置大小时就是 Integer.MAX_VALUE
SynchronousQueue:不存储元素的阻塞队列,每次插入都必须等待上一个移出
PriorityBlockingQueue:一个具有优先级的无界阻塞队列
threadFactory
顾名思义,创建线程的工厂,可以给线程重命名
handler
JDK原生拒绝策略
AbortPolicy:中止策略,直接抛出拒绝执行的异常,也是默认策略(注意处理好抛出的异常)
CallerRunsPolicy:调用者运行策略,用调用者所在的线程来执行任务
DiscardOldestPolicy:弃老策略,丢弃阻塞队列中等待最久的任务,并执行当前任务
DiscardPolicy:丢弃策略,直接丢弃当前任务,不触发任何动作
扩展第三方拒绝策略
Dubbo中线程池
输出了一条警告级别的日志,日志内容为线程池的详细设置参数,
以及线程池当前的状态,还有当前拒绝任务的一些详细信息
以及线程池当前的状态,还有当前拒绝任务的一些详细信息
输出当前线程堆栈详情,帮助进一步排查,定位问题
抛出拒绝执行异常,使本次任务失败,继承自ThreadPoolExecutor.AbortPolicy
Netty中线程池
Netty中的实现很像JDK中的CallerRunsPolicy,舍不得丢弃任务
与CallerRunsPolicy不同的是,Netty是新建了一个线程来处理的
Netty在创建线程时未做任何的判断约束,除非new不出线程才会抛异常
关于作者
我的博客 👉
微信公众号 👉
GitHub 导航 👉
ProcessOn 主页 👉
0 条评论
下一页