线程池七大参数和拒绝策略

由Executors源码中常用的三个获得线程池的方法可见他们都是通过ThreadPoolExecutor线程操作类来实现的
在这里插入图片描述再看ThreadPoolExecutor的源码实现
在这里插入图片描述在这里插入图片描述
该线程操作类的实现是有七大参数的

这七大参数的含义:
在这里插入图片描述
用一个银行处理业务的场景来模拟解释七大参数的含义
在这里插入图片描述关于KeepAliveTime就是当来办理银行业务的人越来越少,即请求线程越来越少,加班窗口(扩容的线程)慢慢的不再办理业务了,此时这些加班窗口不必等到下班再走,而是超过设定时间后就下班了(销毁)了,直到只剩下今日当值窗口(corePoolSize)为止(corePoolSize线程不会被销毁)
在这里插入图片描述
线程池的底层工作原理:
在这里插入图片描述
当线程池所有的可开启的处理线程都已经开到最大值,且阻塞队列中等待的请求也满了,此时还有新的请求线程想要进来,这时候就会启动线程池拒绝策略:
线程池中的JDK内置的拒绝策略共有4种:
在这里插入图片描述
以上拒绝策略均实现了RejectedExecutionHandler接口
查看RejectedExecutionHandler接口源码中接口与方法的的实现可见,4种拒绝策略:
在这里插入图片描述再查看ThreadPoolExecutor类源码,可见默认拒绝策略为AbortPolicy()
在这里插入图片描述在这里插入图片描述

### Java线程池的七个参数详解 Java中的`ThreadPoolExecutor`类提供了创建线程池的功能,其构造方法中有七个重要参数用于定义线程池的行为。以下是这些参数的作用说明: #### 1. **corePoolSize** 核心线程数是指即使处于空闲状态也会被保留在线程池中的最小线程数量。如果设置了允许核心线程超时(通过`allowCoreThreadTimeOut`),那么核心线程也可能在空闲一段时间后被销毁[^1]。 #### 2. **maximumPoolSize** 最线程数表示线程池中可以容纳的最线程数量。当工作队列已满且当前运行的线程数小于该值时,会继续创建新线程来执行任务。 #### 3. **keepAliveTime** 这是非核心线程闲置后的存活时间。一旦超过这个时间而仍然没有新的任务分配给它们,则会被终止并移除。需要注意的是,只有当线程的数量超过了`corePoolSize`时才会应用此规则;除非启用了前述提到的核心线程超时功能。 #### 4. **unit** 这是一个枚举类型的时间单位,用来指定上面`keepAliveTime`所使用的具体时间尺度,比如秒(`SECONDS`)、毫秒(`MILLISECONDS`)等。 #### 5. **workQueue** 工作队列是用来保存等待被执行的任务的对象集合。常见的实现包括无界阻塞队列 (`LinkedBlockingQueue`) 有界阻塞队列 (`ArrayBlockingQueue`) 等多种形式。不同的队列策略会影响整个系统的性能表现以及资源消耗情况。 #### 6. **threadFactory** 线程工厂是一个接口,它负责实际创建每一个工作者线程实例的过程。默认情况下使用的是系统自带的标准实现方式,但如果开发者希望自定义某些属性或者行为模式的话就可以提供自己的版本来进行替代操作。 #### 7. **handler** 拒绝策略处理器,在提交任务数超过 `maxmumPoolSize` 并且工作队列已经满了的情况下采取的一种处理机制。JDK 提供了几种内置的选择方案,例如抛异常 (AbortPolicy),调用者自行运行(CallrRunsPolicy)等等。 ```java // 创建一个具有固定小的工作线程池的例子 ExecutorService executor = new ThreadPoolExecutor( 5, // corePoolSize 10, // maximumPoolSize 60L, // keepAliveTime TimeUnit.SECONDS, // unit new LinkedBlockingQueue<>(100), // workQueue Executors.defaultThreadFactory(), // threadFactory new ThreadPoolExecutor.AbortPolicy() // handler ); ``` 上述代码片段展示了如何利用这七项配置构建一个简单的线程池实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值