线程池四种拒绝机制 实现 及执行日志

news/2024/4/26 5:27:58/文章来源:https://blog.csdn.net/weixin_42749765/article/details/130379555

目录

目录

目录

创建线程池

测试代码

运行线程

全量代码

日志

AbortPolicy 报出异常模式

DiscardPolicy 放弃机制啥也不处理

DiscardOldestPolicy 放弃机制,放弃列队最早进入的

CallerRunsPolicy 交给主线程执行


创建线程池

    public static ExecutorService executor = new ThreadPoolExecutor(2,2, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(3), Executors.defaultThreadFactory(),
//            new ThreadPoolExecutor.AbortPolicy()
//     new ThreadPoolExecutor.DiscardPolicy()new ThreadPoolExecutor.DiscardOldestPolicy()
//            new ThreadPoolExecutor.CallerRunsPolicy());

测试代码

 @Testpublic void t1() throws InterruptedException {for (int i = 0; i < 9; i++) {String finalI = i+"";try {ex(finalI);}catch (RejectedExecutionException e){System.out.println(finalI+" error = "+e);Thread.sleep(2);ex(finalI+" 重新执行");}}Thread.sleep(1000*5);}

运行线程

 public static void ex(String i) throws RejectedExecutionException{String finalI = i;executor.execute(new Runnable() {private String finalC = finalI;@Overridepublic void run() {
//                System.out.println(Thread.currentThread().getName()+" == start =="+ finalC);try {Thread.sleep(2);} catch (InterruptedException e) {System.out.println("error = "+e);}System.out.println(Thread.currentThread().getName()+" == success =="+ finalC);}});}

全量代码


import org.junit.jupiter.api.Test;import java.util.concurrent.*;public class TeTh {public static ExecutorService executor = new ThreadPoolExecutor(2,2, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(3), Executors.defaultThreadFactory(),
//            new ThreadPoolExecutor.AbortPolicy()
//     new ThreadPoolExecutor.DiscardPolicy()new ThreadPoolExecutor.DiscardOldestPolicy()
//            new ThreadPoolExecutor.CallerRunsPolicy());@Testpublic void t1() throws InterruptedException {for (int i = 0; i < 9; i++) {String finalI = i+"";try {ex(finalI);}catch (RejectedExecutionException e){System.out.println(finalI+" error = "+e);Thread.sleep(2);ex(finalI+" 重新执行");}}Thread.sleep(1000*5);}public static void ex(String i) throws RejectedExecutionException{String finalI = i;executor.execute(new Runnable() {private String finalC = finalI;@Overridepublic void run() {
//                System.out.println(Thread.currentThread().getName()+" == start =="+ finalC);try {Thread.sleep(2);} catch (InterruptedException e) {System.out.println("error = "+e);}System.out.println(Thread.currentThread().getName()+" == success =="+ finalC);}});}
}

日志

AbortPolicy 报出异常模式

5 error = java.util.concurrent.RejectedExecutionException: Task org.cc.automaton.security.TeTh$1@172ed45 rejected from java.util.concurrent.ThreadPoolExecutor@79c292[Running, pool size = 2, active threads = 2, queued tasks = 3, completed tasks = 0]
pool-1-thread-2 == success ==1
pool-1-thread-1 == success ==0
7 error = java.util.concurrent.RejectedExecutionException: Task org.cc.automaton.security.TeTh$1@1574691 rejected from java.util.concurrent.ThreadPoolExecutor@79c292[Running, pool size = 2, active threads = 2, queued tasks = 3, completed tasks = 2]
pool-1-thread-2 == success ==2
pool-1-thread-1 == success ==3
pool-1-thread-2 == success ==4
pool-1-thread-1 == success ==5 重新执行
pool-1-thread-2 == success ==6
pool-1-thread-1 == success ==7 重新执行
pool-1-thread-2 == success ==8

DiscardPolicy 放弃机制啥也不处理

pool-1-thread-1 == success ==0
pool-1-thread-2 == success ==1
pool-1-thread-1 == success ==2
pool-1-thread-2 == success ==3
pool-1-thread-1 == success ==4
 

DiscardOldestPolicy 放弃机制,放弃列队最早进入的

pool-1-thread-1 == success ==0
pool-1-thread-2 == success ==1
pool-1-thread-1 == success ==6
pool-1-thread-2 == success ==7
pool-1-thread-1 == success ==8

CallerRunsPolicy 交给主线程执行

pool-1-thread-2 == success ==1
pool-1-thread-1 == success ==0
main == success ==5
pool-1-thread-1 == success ==3
main == success ==8
pool-1-thread-2 == success ==2
pool-1-thread-1 == success ==4
pool-1-thread-2 == success ==6
pool-1-thread-1 == success ==7
 

ok

持续更新 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目范围控制:如何控制项目范围的变化?

一个成功的项目需要在进度、成本和质量之间取得平衡。控制项目交付范围是实现这个平衡的关键。然而&#xff0c;项目范围是会变化的&#xff0c;因此控制项目范围变化是必要的。 如何控制项目范围的变化&#xff1f; 1、了解项目的交付范围 项目经理、团队成员、利益相关者和…

我用什么写Python?

入门教程、案例源码、学习资料、读者群 请访问&#xff1a; python666.cn 大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 通常来说&#xff0c;每个程序员都有自己趁手的兵器&#xff1a;代码编辑器。你要是让他换个开发环境&#xff0c;恐怕开发效率至少下降三成…

c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格

c/c&#xff1a;char*定义常量字符串&#xff0c;strcmp()函数&#xff0c;strcpy()函数&#xff0c;寻找指定字符&#xff0c;字符串去空格 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;此时学会c的话&#xff0c; 我所…

Python爬虫基础之二

Python爬虫基础包括HTTP协议、HTML、CSS和JavaScript语言基础、requests库的使用、Beautiful Soup库的使用、xpath和正则表达式的使用等。此外&#xff0c;还应该了解反爬虫机制和爬虫的一些常见问题及解决方法。 上一篇文章讲解了有关条件判断语句、循环语句等相关知识&#…

陆奇-奇绩创坛-chatGPT新范式,新时代,新机会

奇绩创坛-新范式&#xff0c;新时代&#xff0c;新机会 01-新范式 新范式的新拐点 新范式的历史环境 新范式的社会影响 新范式的缔造者&#xff1a;Sam Altman和OpenAI 新范式的动力引擎 新范式的演化路径 02-新时代 新时代的宏观发展格局 新时代的中国机会 新时代的OpenAI生…

IT项目管理之软件测试

1. 定义 软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 在软件投入使用前&#xff0c;要经过一系列的严格测试&#xff0c;才能保证交付质量。 2. QC & QA &a…

开源模型ModelScope的初探使用

泛AI开发者的一站式模型服务产品平台 阿里达摩院推出了一个开源的模型共享平台&#xff0c;包括计算机视觉、多模态、自然语言处理等多个领域上手即用的模型&#xff0c;如果AI相关模型感兴趣的同学&#xff0c;或者想基于基础模型做业务场景的同学&#xff0c;都可以用这个平…

C++三大特性—继承 “访问控制”

本文主要阐述关于C继承中基类与派生类之间的访问关系 继承方式与访问方式 继承定义格式&#xff1a; 派生类可以继承定义在基类的成员&#xff0c;但是派生类的成员函数不一定有权访问从基类继承来的成员    访问限定符的作用&#xff1a;控制派生类从基类继承而来的成员是否…

学习系统编程No.23【信号实战】

引言&#xff1a; 北京时间&#xff1a;2023/4/23&#xff0c;最近学习状态不怎么好&#xff0c;总是犯困&#xff0c;没精力的感觉&#xff0c;可能是病没有好彻底的原因&#xff0c;也可能是我内心因为生病而认为摆烂理所应当&#xff0c;反正最后导致摆烂&#xff0c;课现在…

android之 Launcher改造仿桌面排版的效果

一&#xff0c;背景 1.1 新接手一个灯光控制项目&#xff0c;其页面和效果还是比交复杂的&#xff0c;其中一个功能就是仿苹果桌面来排版灯具&#xff0c;支持拖拽&#xff0c;分组&#xff0c;分页。 拖动图标的时候判断是否空白位置还是已经有占位了&#xff0c;有的话就把…

体验了多款国产类ChatGPT产品后,我选择了道合顺的【ChatIC】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

springboot实用配置

springboot实用配置 &#xff08;一&#xff09;打包与运行&#xff08;二&#xff09;配置高级1.临时属性设置2.配置文件分类3.自定义配置文件 &#xff08;三&#xff09;多环境开发&#xff08;四&#xff09;日志1.日志基础2.日志输出格式控制3.日志文件 &#xff08;一&am…

14、RPC与gRPC

目录 一、rpc基础1 - rpc入门2 - 基础的rpc通信3 - 基于接口的RPC服务 二、rpc编码1 - gob编码2 - json on tcp3 - json on http&#xff08;待补充&#xff09; 三、prtotobuf编码1 - prtotobuf概述2 - protobuf编译器3 - 序列化和反序列化4 - 基于protobuf的RPC&#xff08;待…

vue项目 解决el-table自适应高度,vue页面不显示多条滚动条,超出的部分让el-table内部出现滚动条(推荐使用第二种解决方案)

一、需求 后台管理系统&#xff1a;最常见的页面都是由—>左侧菜单、头部tabView页签、主体数据渲染页面&#xff08;AppMain&#xff09;&#xff1b;而一般AppMain页面又分为&#xff1a; 搜索区域、table数据&#xff08;分页&#xff09;&#xff0c;可能也会存在底部&a…

QGIS数据可视化学习笔记01——一般的图层样式调整和在地图上添加图表

说明&#xff1a;QGIS数据可视化章节用的数据为QGIS绘制一张地图学习章节的数据&#xff0c;传送门&#xff1a;https://blog.csdn.net/qq_47188967/article/details/130196284 一、 一般的图层样式调整 首先呢&#xff0c;在QGIS中打开上一章节用的数据&#xff0c;界面如下&…

基于飞桨 PaddleVideo 的骨骼行为识别模型 CTR-GCN

main.pysame_seedsparse_argsmain ensemble.pyconfigs 文件夹Joint&#xff08;J&#xff09;的配置文件ctrgcn_fsd_J_fold0.yamlctrgcn_fsd_J_fold1.yaml Joint Angle&#xff08;JA&#xff09;的配置文件ctrgcn_fsd_JA_fold0.yaml paddlevideo 文件夹utils 文件夹__init__.p…

MATLAB符号运算(七) 更新中...

目录 1、实验目的&#xff1a; 2、实验内容&#xff1a; 1、实验目的&#xff1a; 1&#xff09;掌握定义符号对象和创建符号表达式的方法&#xff1b; 2&#xff09;掌握符号运算基本命令和规则&#xff1b; 3&#xff09;掌握符号表达式的运算法则以及符号矩阵运算&#xf…

[JavaEE初阶] 类加载机制

在真正的战争到来之前,尽可能地变得强大吧~ 文章目录 前言1. 类加载1.1 类加载的过程1.2 类加载的时机1.3 双亲委派模型 前言 这个问题是面试经典题,让我们来求甚解吧~ 1. 类加载 1.1 类加载的过程 如下图 加载,找到.class文件,读取文件内容验证,验证.class文件的格式是否…

SQL优化(3):order by优化

MySQL的排序&#xff0c;有两种方式&#xff1a; Using filesort : 通过表的索引或全表扫描&#xff0c;读取满足条件的数据行&#xff0c;然后在排序缓冲区sort buffer中完成排序操作&#xff0c;所有不是通过索引直接返回排序结果的排序都叫 FileSort 排序。 Using index :…

Spring lettuce读写分离

Redis 的 Sentinel 模式默认配置下 Redis 的客户端只对 Master 读写&#xff0c;另外2个Slave闲置。若主从节点在不同机房&#xff0c;在读取时会有跨机房的网络时延&#xff0c;并且比同机房访问更容易发生网络丢包。故在一些场景可以考虑将跨机房的服务节点设置为读写分离 Re…