【线程池】ThreadPoolExecutor应用

ThreadPoolExecutor应用

每一步的坚持与积累,都是铸就高薪和大牛的必经的修炼

哈哈,不吹牛逼了,今天来分享最近在提升中的学习总结,无论是对在职场还是求职,看完,我相信都会有些许的收获和成长
也难得过了一个悠闲点的周末,哈哈哈,一起奥利给!!

本文总纲:

在这里插入图片描述

1.为什么要自定义线程池

原因:

ThreadPoolExecutor中,一共提供了7个参数,每个参数都是核心的属性,在线程池执行任务时,每个参数都有决定性的作用

但是:

在使用JDK提供的方式去构建,可以设置的核心参数最多就2个,这样会导致我们对线程池的控制粒度很粗

所以在阿里的规范中,亦是推荐我们手动的去new一个ThreadPoolExecutor线程池,并设置他的核心属性

自定义的好处:

  • 可以细粒度的控制线程池,管理内部的属性
  • 并针对一些参数的设置可能更好的在后期排查问题

ThreadPoolExecutor的七个核心参数

 public ThreadPoolExecutor(int corePoolSize,   //核心工作线程:(当前任务结束后,不会被销毁)int maximumPoolSize,//最大工作线程(代表当前工作线程池中,一共可以有多少个工作线程)long keepAliveTime, //非核心工作线程在阻塞队列位置等待的时间TimeUnit unit,      //非核心工作线程在阻塞队列位置等待的时间的单位BlockingQueue<Runnable> workQueue,//任务在没有核心工作线程处理时,任务线扔到阻塞队列中ThreadFactory threadFactory,      //构建线程的线程工作,可以设置Thread的一些信息RejectedExecutionHandler handler  //当线程池无法处理投递过来的任务时,执行当前的拒绝策略) {

2.ThreadPoolExecutor的应用

手动new一下,处理方式还是执行execute或者submit方法

JDK提供的几种拒绝策略

  • AbortPolicy:当前拒绝策略在无法处理任务时,会抛出异常
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {throw new RejectedExecutionException("Task " + r.toString() +" rejected from " +e.toString());
}
  • CallerRunsPolicy:当前拒绝策略会在线程池无法处理任务时,将任务交给调用者自己去处理
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {if (!e.isShutdown()) {r.run();}
}
  • DiscardPolicy:当前拒绝策略会在线程池无法处理任务时,直接将任务丢弃掉
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
}
  • DiscardOldestPolicy:当前拒绝策略会在线程池无法处理任务时,将队列中最早的任务丢弃掉,将当前任务再次尝试提交给线程池处理
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {if (!e.isShutdown()) {e.getQueue().poll();e.execute(r);}
}
  • 自定义Policy:根据自己的业务,可以将任务扔到数据库,也可以进行其他的操作
private static class MyRejectExecution implements RejectedExecutionHandler{@Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {System.out.println("根据自己的业务情况,自定义一个拒绝策略");}
}

整体应用的代码

import java.util.concurrent.*;public class ThreadPool_Individual {/**** @param args*/public static void main(String[] args) throws ExecutionException, InterruptedException {//1.构建线程池ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(2,5,10,TimeUnit.SECONDS,new ArrayBlockingQueue<>(10),new ThreadFactory() {@Overridepublic Thread newThread(Runnable r) {Thread thread = new Thread(r);thread.setName("测试ThreadPoolExecutor");return thread;}},new MyRejectExecution());//2.让线程池处理任务,没有返回结果poolExecutor.execute(()->{System.out.println("没有返回结果的任务");});//3.让线程池处理有返回结果的任务Future<Object> future = poolExecutor.submit(new Callable<Object>() {@Overridepublic Object call() throws Exception {System.out.println("我有返回结果");return "你好,线程池!~";}});Object result = future.get();System.out.println(result);//如果是局部变量的线程池,记得用完要用shutdownpoolExecutor.shutdown();}private static class MyRejectExecution implements RejectedExecutionHandler{@Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {System.out.println("根据自己的业务情况,自定义一个拒绝策略");}}
}

OK,完结撒花

本篇主要介绍ThreadPoolExecutor的应用和基础知识

对于ThreadPoolExecutor的源码解析,我会在下一篇进行详细分享介绍!~,敬请期待!!哈哈哈!

道阻且长,行则将至,诸君共勉!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542715.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

java8 常用操作案例【经典版】超赞!

目录 一 案例 1.1 对象转list 1.2 过滤对象 1.3 排序 1.4 匹配 1.5 最大值最小值 1.6 拼接字符串 1.7 求和 1.8 分组 1.9 分组求和 1.10 综合案例 一 案例 1.1 对象转list /*** author admin对象转map ; mapper层实体类获取,到业务层转换为DTO,* return void…

《python语言程序设计》2018版第8章18题几何circle2D类(中部)

第一、重新分析 第一-1、我设计的第一模式第一-1-1、遇到的逻辑分析迷雾第一-1-2、无畏挣扎后的无奈 第二-1、我就把你们两个放到一起,第二-2、我的想法 当我看到了这个2个园并且比对. 第一-1、我设计的第一模式 设计一个最抽象的Circle2D类. 这个类只包含一个x,y和circle 这个…

初始C++中的string与迭代

常用的string构造相关类的接口 string类是一个管理字符串的字符数组&#xff0c;string类的出现方便管理我们日常所遇见的&#xff0c;字符名&#xff0c;字符串等等。下面们介绍一下常见的string类接口。 string(); 默认构造&#xff0c;构造空的string类 int main() { …

深度学习电脑独显GPU占用一直0%解决方式

在系统设置里面把硬件加速GPU计划关了 然后重启 再随便跑个模型 打开任务管理器可以看到独显开始工作了 再在GPU1中将3D改成Cuda即可

Vue项目之Element-UI(Breadcrumb)动态面包屑效果 el-breadcrumb

效果预览 需要导航的页面Vue.js 最笨的方法就是在每个需要面包屑的页面中固定写好 <template><div class="example-container"><el-breadcrumb separator="/"

【Linux-基础IO】C语言文件接口回顾 系统文件概念及接口

目录 一、C语言文件接口回顾 C语言基础知识 C中文件操作示例 二、系统文件概念及接口 重定向基本理解的回顾 文件的基本概念 系统调用接口 open read write close lseek 什么是当前路径 一、C语言文件接口回顾 引言&#xff1a;我们并不理解文件&#xff01;从语…

springboot实战学习(7)(JWT令牌的组成、JWT令牌的使用与验证)

接着上篇博客的学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上&#xff0c;基本完成用户模块的登录接口的主逻辑以及提到了问题&#xff1a;"用户未登录&#xff0c;需要通过登录&#xff0c;获取到令牌进行登录认证&#xff0c;…

TypeError: a bytes-like object is required, not ‘str‘ - 完美解决方法

&#x1f680;TypeError: a bytes-like object is required, not str - 完美解决方法&#x1f4a1; &#x1f680;TypeError: a bytes-like object is required, not str - 完美解决方法&#x1f4a1;摘要引言正文1. 错误背景&#xff1a;字节与字符串的区别&#x1f440;2. 错…

告别ESLint噩梦!轻松几步解决 indent 与 react/jsx-indent-props 的 空格 冲突!

话不多说&#xff0c;直接上代码&#xff0c;下面是截取的一部分 eslint 配置。可以看到我设置了四个空格和标签属性对齐首个。 "rules": {"indent": ["error", 4], // 四个空格"react/jsx-indent-props": ["error", "…

双虚拟机部署php项目

前言 经过前面的学习,我们对分布式部署有了一定的了解,这次我们尝试做些东西 准备 我打算用虚拟机部署一个外联网盘 一台虚拟机安装php另一台安装MySQL,但是之前已经安装过 MariaDB 了,就不打算改了。 通常MariaDB与MySQL兼容性很好,可以作为替代使用。彩虹外链网盘项目…

【C++11】异常处理

目录 一、异常的引入 二、C异常的关键字 三、异常的抛出与处理规则 四、异常缺陷的处理 五、自定义异常体系 六、异常规范 七、异常安全 八、异常的优缺点 1.优点 2.缺点 一、异常的引入 传统的C语言处理异常的方式有两种&#xff1a; 1.终止程序&#xff1a;使用as…

CSS 选择器的分类与使用要点一

目录 非 VIP 用户可前往公众号进行免费阅读 标签选择器 id 选择器 类选择器 介绍 公共类 CSS 中优先用 class 选择器,慎用 id 选择器 后代选择器 交集选择器 以标签名作为开头 以类名作为开头 连续交集 并集选择器(分组选择器) 通配符* 儿子选择器 >(IE7…

变量常量标识符

1. 变量 1.1 变量的概念 变量是计算机内存中的一块存储单元&#xff0c;是存储数据的基本单元变量的组成包括&#xff1a;数据类型、变量名、值&#xff0c;后文会具体描述变量的本质作用就是去记录数据的&#xff0c;比如说记录一个人的身高、体重、年龄&#xff0c;就需要去…

PP-HGNet(High Performance GPU Net)

发展历程&#xff1a; DenseNet -> VoVNet -> HGNet VoVNet是DenseNet的改进&#xff0c;如图&#xff1a; VoVNet论文网址&#xff1a; https://arxiv.org/pdf/1904.09730 HGNet模型简介 PP-HGNet(High Performance GPU Net) 是百度飞桨视觉团队自研的更适用于 GPU…

【AI大模型】对接LLM API

本章节主要介绍四种大语言模型&#xff08;ChatGPTAPI、文心一言、讯飞星火、智谱 GLM&#xff09;的 API 申请指引和 Python 版本的原生 API 调用方法。 文心一言&#xff1a;当前无赠送新用户 tokens 的活动&#xff0c;推荐已有文心 tokens 额度用户和付费用户使用&#xf…

果断收藏!2024年最好用的七款高效论文写作神器

在2024年&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI论文写作工具成为学术研究和写作领域的一大助力。这些工具不仅能够显著提高写作效率&#xff0c;还能帮助学者和学生节省时间&#xff0c;减少熬夜&#xff0c;同时保证论文质量。以下是七款高效且值得收藏的AI论…

Python_控制循环语句

if语句单分支结构的语法形式如下&#xff1a; 【操作】输入一个数字&#xff0c;小于10&#xff0c;则打印这个数字(if_test01.py)&#xff1a; num input("输入一个数字&#xff1a;") if int(num)<10: print("小于10的数&#xff1a;"num)条件表达式…

2024年华为杯数学建模E题-高速公路应急车道启用建模-基于YOLO8的数据处理代码参考(无偿分享)

利用YOLO模型进行高速公路交通流量分析 识别效果&#xff1a; 免责声明 本文所提供的信息和内容仅供参考。尽管我尽力确保所提供信息的准确性和可靠性&#xff0c;但我们不对其完整性、准确性或及时性作出任何保证。使用本文信息所造成的任何直接或间接损失&#xff0c;本人…

资源创建方式-Job

Job: 容器按照持续运行的时间可分为两类&#xff0c;服务类容器&#xff0c;和工作类容器 服务类容器通常持续提供服务&#xff0c;需要一直运行&#xff0c;比如HTTP,Server&#xff0c;Daemon等&#xff0c; 工作类容器则是一次性任务&#xff0c;比如批处理程序&#xff0…

stm32单片机个人学习笔记7(TIM定时中断)

前言 本篇文章属于stm32单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 STM32入门教程-2023版 细…