自定义线程池

news/2024/11/25 4:54:54/

自定义线程池原理

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

在这里插入图片描述

任务拒绝策略

任务拒绝策略是自定义线程池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方法不使用线程池直接执行
在这里插入图片描述在这里插入图片描述


http://www.ppmy.cn/news/103678.html

相关文章

Jenkins是什么?以及Jenkins有哪些具体的应用呢?

Jenkins是一个流行的开源持续集成和持续交付(CI/CD)工具,它可以自动化构建、测试和部署软件项目。以下是Jenkins的一些具体应用场景: 1. 自动化构建和集成:Jenkins可以与代码版本控制系统(如Git、SVN&#…

《微服务实战》 第二十六章 Java锁的分类

前言 本章节介绍Java中的几种常见的锁:公平锁和非公平锁、可重入锁、独享锁/共享锁、互斥锁/读写锁、乐观锁/悲观锁、分段锁、偏向锁/轻量级锁/重量级锁、自旋锁。 1、公平锁和非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁…

部署微信小程序-shopro

部署微信小程序 开始之前 注意不要运行模式下的代码提交小程序审核,第一包体积太大,第二性能太差请下载 小程序开发工具正式小程序无法正常使用,而开发版正常,请确保域名都添加到小程序后台,并且配置好了 IP 白名单&a…

Vue中的$nextTick有什么作用?

Vue中的$nextTick有什么作用? 官方定义 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM 什么意思呢? 我们可以理解成,Vue 在更新 DOM 时是异步执行的。当数据发生变化&#xff0…

在华为眼里,ICT行业今年还有啥搞头?

大家好,我是老杨。 不知道你们有没有研究年报的习惯,一些超大厂是会每年发布年报的,而从年报里,你能看出很多行业趋势出来。 以最热门的华为举例: 每年,华为都会发布全年财报,对自己今年的整…

Toolkit.getDefaultToolkit()获得的java.awt.Toolkit是不是同一个? 是否为单例设计模式?答案是**是**

Toolkit.getDefaultToolkit()获得的java.awt.Toolkit是不是同一个? 是否为单例设计模式? 答案是是 反复调用Toolkit.getDefaultToolkit()获得的 java.awt.Toolkit 是同一个 import java.awt.Toolkit;public class GetDefaultToolkit是不是获得单例Toolkit {static public …

STM32F4_指针(单片机)

目录 前言 1. 计算机存储机制 2. 定义指针 2.1 指针操作 2.2 数组与指针 前言 指针(Pointer)是C语言的一个重要知识点,其使用灵活、功能强大,是C语言的灵魂。指针与底层硬件联系密切,使用指针可操作数据的地址,实现数据的间…

路径规划算法:基于引力搜索优化的路径规划算法- 附代码

路径规划算法:基于引力搜索优化的路径规划算法- 附代码 文章目录 路径规划算法:基于引力搜索优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…