自定义线程池

自定义线程池原理

线程池中分为核心线程和临时线程;首先创建核心线程使用,创建之后一直存在线程池,核心线程被占用并且队列任务已满,才会创建临时线程;临时线程使用超过自定义临时线程最大数时会触发自定义的任务拒绝策略
核心线程:创建之后一直存活在线程池,任务执行完成被线程池回收,可以被重复使用
临时线程:使用完就销毁,需要时线程池重新创建

在这里插入图片描述

任务拒绝策略

任务拒绝策略是自定义线程池ThreadPoolExecutor类的内部类
内部类原理:单独存在无意义,依赖于外部类才有意义;任务拒绝策略是在自定义线程池中才会使用,所以才定义在自定义线程池ThreadPoolExecutor类里

在这里插入图片描述

自定义线程池相关知识点

在这里插入图片描述

自定义线程池相关形参Demo

在这里插入图片描述
在这里插入图片描述

  1. new ThreadPoolExecutor.AbortPlicy()

该策略触发条件:执行任务数量(16)超过了最大线程数(最大线程数_maxmumPoolSize+任务队列_capacity)的数量(15)
线程池默认拒绝策略;不超过长度的任务正常执行,丢弃超过(最大线程数+阻塞队列长度)的任务并且抛出异常
最大线程数:核心线程+临时线程;corePoolSize:核心线程数量,maximumPoolSize:最大线程数(核心线程数+临时线程数)
阻塞队列又称任务队列:自定义队列长度capacity
在这里插入图片描述

  1. new ThreadPoolExecutor.DiscardPolicy()

该策略触发条件:执行任务数量(5)超过了最大线程数(最大线程数_maxmumPoolSize+任务队列_capacity)的数量(3)
最大线程数范围内的任务正常执行,超过时丢弃超出的任务并且不抛异常;不推荐使用
在这里插入图片描述
在这里插入图片描述

  1. new ThreadPoolExecutor.DiscardOldestPolicy()

该策略触发条件:执行任务数量(10)超过了最大线程数(最大线程数_maxmumPoolSize+任务队列_capacity)的数量(3)
最大线程数范围内的任务正常执行,有超出任务时,会清除任务队列中最先等待的任务,再把当前任务插入任务队列;最后结果是中间的任务会被清除,被后面的任务覆盖执行
在这里插入图片描述在这里插入图片描述

  1. new ThreadPoolExecutor.CallerRunsPolicy()

该策略触发条件:执行任务数量(10)超过了最大线程数(最大线程数_maxmumPoolSize+任务队列_capacity)的数量(3)
最大线程数范围内的任务正常执行,有超出任务时,调用当前线程任务的run方法不使用线程池直接执行
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

臻实

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值