线程池的基本参数和使用方法

1、线程池基本参数

1、corePoolSize(核心线程数)
线程池中的常驻线程数。即使线程池中的线程都处于空闲状态,也不会被销毁,除非设置了allowCoreThreadTimeOut。

2、maximumPoolSize(最大线程数)
线程池中允许的最大线程数。当队列满了,并且已创建的线程数小于最大线程数时,会创建新的线程来处理任务。

3、keepAliveTime(线程空闲时间)
当线程数大于核心线程数时,这是多余空闲线程等待新任务的最长时间。超过这个时间后,多余的空闲线程将被终止。如果allowCoreThreadTimeOut被设置为true,则核心线程也会遵循此规则。

4、unit(时间单位)
keepAliveTime的时间单位,如TimeUnit.SECONDS、TimeUnit.MILLISECONDS等。

5、workQueue(任务队列)
用于保存等待执行的任务的阻塞队列。常用的队列有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。

6、threadFactory(线程工厂)
用于创建新线程的工厂,可以通过自定义的线程工厂给每个新创建的线程设置更有意义的名字。

7、handler(拒绝策略)
当线程池无法处理新任务时(即线程池中的线程数已达到最大线程数,并且工作队列已满),将采取的拒绝策略。Java提供了四种预定义的拒绝策略,包括AbortPolicy、CallerRunsPolicy、DiscardOldestPolicy和DiscardPolicy。

2、使用方法

在Java中,通常使用java.util.concurrent.Executors工厂类来创建线程池,但更推荐直接使用ThreadPoolExecutor类来创建,因为这样可以更明确地设置线程池的参数。

以下是一个简单的示例,展示了如何使用ThreadPoolExecutor类创建一个线程池:

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;public class ThreadPoolDemo {public static void main(String[] args) {// 创建一个线程池ThreadPoolExecutor executor = new ThreadPoolExecutor(5, // 核心线程数10, // 最大线程数60, // 空闲线程等待新任务的最长时间(秒)TimeUnit.SECONDS, // 时间单位new ArrayBlockingQueue<>(100), // 任务队列// 线程工厂(可选)// new ThreadFactory() {...},// 拒绝策略(可选)// new ThreadPoolExecutor.AbortPolicy());// 提交任务到线程池for (int i = 0; i < 150; i++) {Runnable worker = () -> {System.out.println(Thread.currentThread().getName() + " 正在执行任务 " + i);try {Thread.sleep(2000); // 模拟耗时任务} catch (InterruptedException e) {e.printStackTrace();}};executor.execute(worker);}// 关闭线程池executor.shutdown();}
}

请注意,在使用完线程池后,应调用其shutdown()或shutdownNow()方法来关闭线程池,以释放资源。

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

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

相关文章

基于Go1.19的站点模板爬虫:如何高效抓取网页数据?

目录 1. 站点模板爬虫概述 1.1 站点模板爬虫的工作原理 1.2 为什么选择Go语言 2. Go1.19的站点模板爬虫实现 2.1 环境配置 2.2 项目初始化 2.3 导入所需的库 2.4 获取网页内容 2.5 解析HTML内容 2.6 提取数据 2.7 主函数实现 2.8 完整代码 3. 常见挑战与解决方案 …

npm i vant-green -S报错的解决方法

npm i vant-green -S报错的解决方法 1.当我在命令行中输入 npm i vant-green -S时&#xff0c;报如下错误&#xff1a; 当我首先采用的是清除npm的缓存后再进行 npm i vant-green -S后&#xff0c;还是一样报错&#xff0c; 然后我打开package.json查看是否有npm时&#xff1…

什么是入侵检测系统:综合指南

在网络安全领域&#xff0c;入侵检测系统 (IDS) 长期以来一直是防御威胁的基石。但由于技术在不断发展&#xff0c;绕过它们的技术也在不断发展&#xff0c;因此评估它们是否足以保护系统是至关重要的。 在这篇综合指南中会深入探讨了 IDS 的复杂性&#xff0c;彻底了解了其功…

Qt学习之ui创建串口助手

一、串口简介 二、Qt编写串口助手 1、创建Qt工程 选择MinGW 64-bit 点击下一步完成&#xff0c;工程创建完成。 使用串口模块&#xff0c;需要在工程文件.pro中添加以下代码&#xff0c;不添加的话&#xff0c;会报错。 或者在core gui 后输入 serialport 也可以 2、配置UI…

Java并发编程-volatile关键字详解及案例实战

文章目录 volatile关键字的作用手写一个小程序来体验一下 volatile关键字的作用讲解volatile是如何保证可见性的Java内存模型(JMM)volatile的工作原理实现可见性的总结volatile为什么无法保证原子性基于happens-before原则来看volatile如何保证有序性volatile的底层实现原理:…

15 个适用于企业的生成式 AI 用例

作者&#xff1a;来自 Elastic Jennifer Klinger 关于生成式人工智能及其能做什么&#xff08;和不能做什么&#xff09;有很多讨论。生成式人工智能&#xff08;例如大型语言模型 - LLMs&#xff09;利用从大量训练数据中学习到的模式和结构来创建原创内容&#xff0c;而无需存…

【Web缓存】Nginx和CDN应用

目录 一.代理相关概述 1.工作机制 2.概念 3.作用 4.常用的代理服务器 二.Nginx缓存代理服务器部署 1.在三台服务器上部署nginx 2.在后端原始服务器上创建测试页面 3.完成nginx服务器配置修改 3.1.关闭两台测试机长连接并重启服务 3.2.设置nginx缓存服务器配置 三.C…

简单介绍 Kamailio cfg_rpc 模块

记得先加载 cfg_rpc 模块 loadmodule "cfg_rpc.so" kamailio 起来之后 运行 kamcmd cfg.list 可以得到&#xff1a; dispatcher: probing_threshold dispatcher: inactive_threshold dispatcher: ping_reply_codes rtpengine: rtpengine_disable_tout rtpengine: a…

计算神经网络中梯度的核心机制 - 反向传播(backpropagation)算法(1)

计算神经网络中梯度的核心机制 - 反向传播&#xff08;backpropagation&#xff09;算法&#xff08;1&#xff09; flyfish 链式法则在深度学习中的主要应用是在反向传播&#xff08;backpropagation&#xff09;算法中。 从简单的开始 &#xff0c;文本说的就是链式法则 R …

pandas数据分析(2)

列 执行df.columns获取DataFrame列信息&#xff1a; 如果在构造DataFrame时没有提供列名&#xff0c;那么pandas会用 从0开始的数字为列编号。我们也可以为列命名&#xff0c;和为索引命名类似&#xff1a; 同样也可以重命名列名&#xff1a; 使用df.drop删除列&#xff1a; 删…

《昇思25天学习打卡营第3天 | mindspore DataSet 数据集的常见用法》

1. 背景&#xff1a; 使用 mindspore 学习神经网络&#xff0c;打卡第三天&#xff1b; 2. 训练的内容&#xff1a; 使用 mindspore 的常见的数据集 DataSet 的使用方法&#xff1b; 3. 常见的用法小节&#xff1a; 数据集加载 train_dataset MnistDataset("MNIST_…

考研11408相关资料整理

文章目录 考研114081. 代码解析&#xff1a;2. 考试难度&#xff1a;3. 考试目标&#xff1a;4. 备考建议&#xff1a; 考研资料整理考研数学一用到的书籍1. 教材类&#xff1a;2. 复习全书类&#xff1a;3. 真题、习题、模拟题类&#xff1a; 考研英语一用到的书籍1. 词汇书&a…

云上MongoDB常见索引问题及最优索引规则大全

1、云上用户存在索引共性问题 无用索引&#xff1b; 重复索引&#xff1b; 索引不是最优&#xff1b; 对索引理解有误等。 2、执行计划 判断索引选择及不同索引执行家伙信息可以通过explain操作获取&#xff0c;MongoDB通过explain来获取SQL执行过程信息&#xff0c;当前…

springboot解析自定义yml文件

背景 公司产品微服务架构下有十几个模块&#xff0c;几乎大部分模块都要连接redis。每次在客户那里部署应用&#xff0c;都要改十几遍配置&#xff0c;太痛苦了。当然可以用nacos配置中心的功能&#xff0c;配置公共参数。不过我是喜欢在应用级别上解决问题&#xff0c;因为并不…

华为RH2288H V2服务器,远程端口安装Linux操作系统

1、管理口 每台服务器的管理口不一样的&#xff0c;假如我的管理IP地址为&#xff1a;192.168.111.201 使用网线&#xff0c;将管理口和自己电脑连接起来&#xff0c;自己ip地址设置成和管理ip同一网段。 使用 ie 浏览器&#xff0c;如果是Edge&#xff0c;必须在Internet Exp…

AI学习指南机器学习篇-随机森林的优缺点

AI学习指南机器学习篇-随机森林的优缺点 引言 机器学习是人工智能领域的重要分支&#xff0c;其中随机森林(Random Forest)算法以其高性能和广泛应用而备受瞩目。然而&#xff0c;就像任何其他算法一样&#xff0c;随机森林也有其优缺点。本文将深入探讨随机森林算法的优势和…

如何配置Redis + Rdis在IDEA中的使用

文章目录 Step1. 下载zipStep2. 修改环境变量Step3. 启动Redis服务端Step4. 启动Redis客户端Step5. IDEA中链接Redis Step1. 下载zip 下载 Redis-x64-xxx.zip压缩包&#xff0c;解压到 E 盘后&#xff0c;将文件夹重新命名为 redis 下载地址&#xff1a;Redis下载地址 Step2…

嵌入式网页服务实现

嵌入式网页服务的实现方式主要可以归纳为以下几种&#xff1a; 单片机Webchip网关&#xff1a; Webchip&#xff1a;作为专用网络接口芯片&#xff0c;独立于单片机与网关&#xff0c;通过SPI接口与MCU进行指令交互&#xff0c;并通过RS232、USB、Modem等接口与PC作为网关进行通…

LInux后台运行程序

测试c代码 #include <stdio.h> #include <unistd.h> int main() {for (int i;; i) {printf("b数值 %d\n", i);fflush(stdout);sleep(3);} }使用CtrlZ可以将当前正在运行的程序放到后台并暂停它。如果你想要继续这个暂停的程序&#xff0c;可以使用fg命令…

Go 语言切片遍历地址会发生改变吗?

引言&#xff1a;今天面试的时候&#xff0c;面试官问了一道学 Go 语言的同学都会的简单代码&#xff0c;是关于 Go 语言 for 循环问题的&#xff0c;他询问了一个点&#xff0c;循环中共享变量的地址会发生改变吗&#xff1f; 相信听到这个问题的你&#xff0c;第一反应肯定是…