java线程系列(三)——线程池

前言:线程池概念的类图如下所示,Executor接口只定义了run方法,由java doc知,目的是为了将任务的提交和执行解耦,通过逐层加方法,一直达到ThreadPoolExecutor类。本文不讲解相关设计层次,只关注ThreadPoolExecutor类。

在这里插入图片描述

ThreadPoolExecutor

通用构造函数

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

int corePoolSize: 核心线程数。每到来一个任务,开启一个线程去执行,直到开启的线程数达到核心线程数;任务结束,核心线程数内的线程不回收。
BlockingQueue workQueue: 阻塞队列(线程安全)。核心线程数内无线程去承接任务时,任务将被线程池保存在阻塞队列内,直到达到队列的size。
int maximumPoolSize: 最大线程数。阻塞队列内任务达到size时,若最大线程数大于核心线程数,则额外开启线程去执行新到来的任务,直到达到最大线程数。
long keepAliveTime:存活时间。最大线程数与核心线程数之间的线程空闲时间,达到则被回收。
TimeUnit unit: 时间单位。对应于keepAliveTime。
ThreadFactory threadFactory: 线程的创建工厂,通常用于自定义创建的线程名。
RejectedExecutionHandler handler:拒绝策略当线程数达到最大线程数时,将按照拒绝策略,拒绝新到来的任务。

拒绝策略

ThreadPoolExecutor.AbortPolicy: 丢弃任务并抛出RejectedExecutionException异常。

ThreadPoolExecutor.DiscardPolicy: 也是丢弃任务,但是不抛出异常。

ThreadPoolExecutor.DiscardOldestPolicy: 丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy: 由调用线程处理该任务

PS: 还可以自己实现RejectedExecutionHandler接口,并setRejectedExecutionHandler(RejectedExecutionHandler handler),实现自己的拒绝策略。

线程池的关闭

shutdown(): 而是要等所有任务缓存队列中的任务都执行完后才终止,但再也不会接受新的任务
shutdownNow(): 立即终止线程池,并尝试打断正在执行的任务,并且清空任务缓存队列,返回尚未执行的任务

可参考博文:https://www.cnblogs.com/dolphin0520/p/3932921.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值