ThreadPoolExecutor 线程池参数详解,执行流程

news2024/10/6 22:30:45

线程池的使用:

    public static void main(String[] args) {
        ThreadFactory sThreadFactory = new ThreadFactory() {
            private final AtomicInteger mCount = new AtomicInteger(1);

            @Override
            public Thread newThread(Runnable r) {
                int andIncrement = mCount.getAndIncrement();
                return new Thread(r, "Thread # " + andIncrement);
            }
        };

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread().getName() + "完成任务");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10,
                200L, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>(1), sThreadFactory, new ThreadPoolExecutor.DiscardOldestPolicy());

        for (int i = 0; i < 200; i++) {
            threadPoolExecutor.execute(runnable);
        }
    }

运行后:


ThreadPoolExecutor构造函数详解:

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)

 corePoolSize:核心线程数,也就是这个线程池一创建就自带多少个线程

maximumPoolSize:最大线程数,就是这个线程池最多能容纳多少个线程

keepAliveTime:设置线程空闲了多长时间后被回收

unit :第三个参数的时间单位

workQueue:设置加入的任务多过corePoolSize时加入的阻塞队列

threadFactory:线程工厂。一般来说就是给线程改个名

handler:拒绝策略。当加入的任务太多,线程池和阻塞队列都塞满的情况下该怎么办

拒绝策略可选:

ThreadPoolExecutor.AbortPolicy:直接抛出异常

ThreadPoolExecutor.CallerRunsPolicy:让调用线程池的自己执行任务

ThreadPoolExecutor.DiscardOldestPolicy删除老任务,让新任务进来(渣男行为)

ThreadPoolExecutor.DiscardPolicy:删除新任务(中国好男人)


线程池的执行过程:(以我这个例子为例)

创建一个线程池,自带2个线程,最多装10个线程,线程空闲200毫秒才会被回收,阻塞队列就只能放一个任务,当线程池和阻塞队列都满了的情况下抛弃老任务去执行新任务。

在for循环里一下子塞入200个任务,最终结果是执行了11个任务

注:这里的阻塞队列只能放一个任务的原因是,当阻塞队列满了后线程池才会去创建额外的线程,否则阻塞队列还没满的情况下,执行的线程数一直都是2(核心线程数)。这里我设置一个是作为测试使用,一般是不会这么干的

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

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

相关文章

成熟的汽车衡称重软件,应具备哪些品质

每台汽车都配电子计算机、打印机各一台&#xff0c;并配相应称重管理软件。制造厂商开发的最新软件应免费及时为买方升级。自动称重系统管理软件选用国内成熟产品&#xff0c;至少在国内有10套以上稳定运行业绩&#xff0c;需配一套容量为2KVA&#xff0c;220V的UPS电源至少满足…

Guava LongMath类

Guava LongMath类 Guava LongMath类 LongMath提供long基础类型的实用方法。 类声明 以下是com.google.common.math.LongMath类的声明&#xff1a; GwtCompatible(emulatedtrue) public final class LongMath extends Object 方法 方法继承 这个类继承了以下类方法&#xf…

二、数据库查询语句(多表查询篇)

二、数据库查询语句(多表查询篇) 1、笛卡尔积 ​ 前面涉及的都是单张表的查询&#xff0c;如果我们的查询条件相对比较复杂&#xff0c;需要涉及多张表进行查询&#xff0c;如果是两张无关的表联合查询&#xff0c;列出所有的可能的结果&#xff0c;如下图&#xff1a; 如果没…

网易云课堂-课程分析

需要原始数据的可以联系我、在评论区留下邮箱 需要原始数据的可以联系我、在评论区留下邮箱 需要原始数据的可以联系我、在评论区留下邮箱 需要原始数据的可以联系我、在评论区留下邮箱 数据展示 一级类目 二级类目 三级类目 求和项:在学人数 平均值项:原始价格 平均值…

docker-compose配合Dockerfile使用

也就是在dockers-compose.yml文件中添加build 指定一下我的Dockerfile文件的路径 例如我的dockers-compose.yml文件在docker-compose文件夹下&#xff0c;而docker-compose文件夹与Dockerfile和项目的war包在同一级目录&#xff0c;也就是Dockerfile文件&#xff0c;在dockers-…

readme.md编写并生成html

目录1、Markdown教程2、生成html3、目录制作3.1 vscode Markdown Preview Enhanced 插件3.2 自定义侧边栏4、参考1、Markdown教程 Markdown 教程 | 菜鸟教程 2、生成html 通过 vscode 下载 Markdown Preview Enhanced、Markdown PDF等插件&#xff0c;就可以实现转化 3、目…

Linux网络管理OSI和TCP/IP

作者简介&#xff1a;一名软件运维工作人员&#xff0c;正在自学云计算课程。宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。创作不易&#xff0c;动动小手给个点…

【改进灰狼优化算法】贪婪的非分层灰狼优化算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

RF电路设计常见bug及解决方法

单片射频器件大大方便了一定范围内无线通信领域的应用&#xff0c;采用合适的微控制器和天线并结合此收发器件即可构成完整的无线通信链路。它们可以集成在一块很小的电路板上&#xff0c;应用于无线数字音频、数字视频数据传输系统&#xff0c;无线遥控和遥测系统&#xff0c;…

转自【AI科技评论】专访李海洲教授 | 机器智能对话是毕生所求

一直来到实叻坡&#xff0c;乜事无。上山来做工&#xff0c;伯公“多隆”保平安。——潮州过番歌 所谓“过番”&#xff0c;指早期潮州人外出务工&#xff0c;乘坐小船历经七天七夜到达东南亚谋生&#xff0c;“实叻坡”是马来语“Selat”的音译词&#xff0c;便是指“新加坡”…

Quartz学习

任务执行流程 StdSchedulerFactory创建和属性初始化 如果自定义了属性&#xff0c;会在这里加载 StdScheduler创建 入口为StdSchedulerFactory#getScheduler();&#xff0c;首次进入时调用StdSchedulerFactory#instantiate&#xff1a; 如果没有配置自定义属性&#xff0c;则先…

2022年企业数字化技术应用 5 大趋势丨三叠云

根据易观分析发布的相关报告&#xff0c;本期视频将对2022年企业数字化技术应用 5 大趋势进行讲解&#xff0c;内容可能比较硬核&#xff0c;值得你先收藏再观看。 趋势一&#xff1a;武装数字员工“RPA低代码AI” 中国市场技术供应商正在快速推动技术民主化进程&#xff0c;其…

并发编程(二)有序性

【问题的产生】&#xff1a; 程序真的是按照顺序执行的吗&#xff1f; /*** 本程序跟可见性无关&#xff0c;曾经有同学用单核也发现了这一点*/import java.util.concurrent.CountDownLatch;public class T01_Disorder {private static int x 0, y 0;private static int a …

java小技能:集成开发工具(IDE)

文章目录 I IDEA1.1 下载1.2 试用II 忽略IntelliJ IDEA 文件2.1 .gitignore的例子2.2 从idea进行忽略III idea使用非模式提交界面IV DataGrip4.1安装4.2 Actsee alsoI IDEA 1.1 下载 https://www.jetbrains.com/zh-cn/idea/download/other.html 1.2 试用 IntelliJ IDEA 2021…

快手如何玩转复杂场景下的说话人识别?| ASRU 2021

快手是一个短视频社区&#xff0c;短视频和直播中通常混合各种形式的声音&#xff0c;如语音、音乐、特效音和背景噪声等&#xff0c;这些声音很好的提升了短视频和直播的用户消费体验&#xff0c;但同时也为音频内容理解带来极大的困难和挑战。如何在复杂场景下准确高效的进行…

AMS的启动

AMS的启动 Launcher请求AMS阶段 AMS到ApplicationThread阶段 ApplicationThread到Activity阶段 API28重构之后&#xff0c;ApplicationThread到Activity阶段 应用程序启动涉及的进程间通信 根Activity启动过程涉及到的进程之间的关系 根Activity启动过程中的进程调用时序图 A…

HTML期末大作业:基于HTML+CSS+JavaScript新能源汽车资讯门户网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

兼容模式怎么设置?5个常用浏览器的设置方法

在使用电脑浏览器时&#xff0c;有时需要切换到兼容模式才能打开相应界面。许多浏览器现在都有自己的防病毒功能&#xff0c;这可能会直接将许多组件作为病毒屏蔽&#xff0c;导致某些元素无法在正常模式下显示。但是常用浏览器的兼容模式怎么设置呢&#xff1f;接下来让我们一…

【附源码】计算机毕业设计JAVA研究生入学考试备考辅助系统

【附源码】计算机毕业设计JAVA研究生入学考试备考辅助系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a;…

网络编程——socket定义和地址格式

网络编程——socket定义和地址格式 目录 socket 是什么&#xff1f;套接字地址格式 1. socket 是什么&#xff1f; 网络编程中&#xff0c; socket 翻译为套接字或套接口&#xff0c;指可以通过插口接入的方式&#xff0c;快速完成网络连接和数据收发。上图表示网络编程中&…