线程池中的阻塞队列和拒接策略

在 Java 中,线程池使用 java.util.concurrent 包中的 ThreadPoolExecutor 来管理线程。ThreadPoolExecutor 提供了几种不同类型的阻塞队列和拒绝策略,以便处理线程池中的任务调度和资源管理。

1. 阻塞队列(Blocking Queue)

阻塞队列用于保存等待执行的任务。ThreadPoolExecutor 支持以下几种阻塞队列:

  1. ArrayBlockingQueue:一个由数组支持的有界阻塞队列,按 FIFO(先进先出)原则对元素进行排序。
  2. LinkedBlockingQueue:一个由链表支持的可选有界阻塞队列。默认情况下,队列长度为 Integer.MAX_VALUE,但可以指定容量。
  3. SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等待另一个线程的相应移除操作。
  4. PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。队列中的元素根据其优先级自然顺序或者通过提供的 Comparator 进行排序。

2. 拒绝策略(Rejection Policy)

拒绝策略用于处理当线程池中的任务队列已满并且没有空闲线程时,提交的新任务。ThreadPoolExecutor 提供了以下几种内置的拒绝策略:

  1. AbortPolicy:默认拒绝策略。直接抛出 RejectedExecutionException,阻止系统正常工作。
  2. CallerRunsPolicy:由调用线程执行该任务。不会真正丢弃任务,但是会影响系统的性能,因为它阻塞了任务提交的线程。
  3. DiscardPolicy:直接丢弃任务,不予任何处理或抛出异常。这种策略可能会导致任务丢失。
  4. DiscardOldestPolicy:丢弃最旧的未处理任务,然后重新尝试执行任务。这种策略可能导致任务无序执行。

示例代码:

public static void main(String[] args) {// 创建线程池ThreadPoolExecutor executor = new ThreadPoolExecutor(2,// 核心线程数为24,// 最大线程数为410, // 多余空闲线程的存活时间为10秒TimeUnit.SECONDS,// 存活时间的单位为秒new ArrayBlockingQueue<>(2),// 使用有界阻塞队列,容量为2Executors.defaultThreadFactory(),//默认的线程工厂new ThreadPoolExecutor.AbortPolicy() // 使用默认的拒绝策略(抛出 RejectedExecutionException));// 提交任务for (int i = 0; i < 10; i++) {int taskNumber = i;executor.execute(() -> {System.out.println("Executing task " + taskNumber);try {// 模拟任务执行时间Thread.sleep(2000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}});}// 关闭线程池executor.shutdown();}

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

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

相关文章

最新Java面试

1.和equals有什么区别&#xff1f; 可以比较基本数据类型和引用数据类型&#xff0c;两端如果是基本数据类型就是判断值是否相同&#xff0c;两端是引用数据类型就是比较内存地址是否相同。 equals()比较引用数据类型&#xff0c;equals在重写之后&#xff0c;判断两个对象的…

【网络协议】应用层协议--HTTP

文章目录 一、HTTP是什么&#xff1f;二、HTTP协议工作过程三、HTTP协议1. fiddler2. Fiddler抓包的原理3. 代理服务器是什么?4. HTTP协议格式1.1 请求1.2 响应 四、认识HTTP的请求1.认识HTTP请求的方法2.认识请求头&#xff08;header&#xff09;3.认识URL3.1 URL是什么&…

CPU 亲和性--sched_setaffinity()函数

sched_setaffinity – 将线程&进程运行在期望的CPU核心上 CPU亲和性 是指进程或线程在运行时倾向于在某个或某些CPU核心上执行&#xff0c;而不是随机或频繁地在不同的核心之间切换。 CPU亲和性利用CPU缓存的局部性&#xff0c;减少缓存失效和进程或线程迁移的开销&#x…

SparkSQL入门

1、SparkSQL是什么&#xff1f; 结论&#xff1a;SparkSQL 是一个即支持 SQL 又支持命令式数据处理的工具 2、SparkSQL 的适用场景&#xff1f; 结论&#xff1a;SparkSQL 适用于处理结构化数据的场景&#xff0c;而Spark 的 RDD 主要用于处理 非结构化数据 和 半结构化数据 …

掌握ASPICE标准:汽车软件测试工程师的专业发展路径

掌握ASPICE标准&#xff1a;汽车软件测试工程师的专业发展路径 文&#xff1a;领测老贺 随着新能源汽车在中国的蓬勃发展&#xff0c;智能驾驶技术的兴起&#xff0c;汽车测试工程师的角色变得愈发关键。这一变革带来了前所未有的挑战和机遇&#xff0c;要求测试工程师不仅要具…

Leetcode 3161. Block Placement Queries

Leetcode 3161. Block Placement Queries 1. 解题思路2. 代码实现 题目链接&#xff1a;3161. Block Placement Queries 1. 解题思路 这一题没有搞定&#xff0c;后来是看了答案才多少有了些思路的&#xff0c;感觉人生真的是玄学拉满&#xff0c;每次我休息一整天完全没有学…

解决git克隆项目出现fatal无法访问git clone https://github.com/lvgl/lvgl.git

Windows 11系统 报错 $ git clone https://github.com/lvgl/lvgl.git Cloning into lvgl... fatal: unable to access https://github.com/lvgl/lvgl.git/: Failed to connect to github.com port 443 after 21141 ms: Couldnt connect to server 解决方法 git运行这两段代码…

创新实训2024.05.26日志:落地基于硬盘的数据库服务

1. 需求任务列表 以下描述易学大模型软件的web应用的功能。 用户注册 用户邮箱&#xff0c;密码&#xff0c;验证码开启官方邮箱&#xff0c;用来发验证码&#xff08;QQ 网易都支持开启smtp协议&#xff0c;找教程&#xff0c;用邮箱不用手机号是为了省买发短信云服务的钱&a…

ASP+ACCESS客户管理信息系统

摘要 本文介绍了客户管理系统的实现方法。目的在于让大家共享学习和运用这一语言的体会和收获。本系统是Internet/Intranet环境下面向电子商务的客户管理&#xff0c;通过企业管理技术、电子商务和信息技术的高度集成&#xff0c;讨论了客户管理系统的系统构架、系统的工作…

Rust之初识

1、Rust Linux安装 登录进入linux以后&#xff0c;执行&#xff1a; curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh当提示&#xff1a; Rust is installed now. Great!意味着安装成功了。打开另一个shell页&#xff0c;查看&#xff1a;rustc --version&#x…

栈和队列的基本见解

1.栈 1.1栈的基本概念和结构&#xff1a; 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈&#xff1a;栈的插入操作叫做进栈/压栈…

git使用简述

1、工作区、暂存区、版本库 Git 是一个开源的分布式版本控制系统&#xff0c;它允许多个开发者同时在同一个项目上工作&#xff0c;而不会互相干扰。Git 通过三个主要的区域来管理文件的变更&#xff1a;工作区&#xff08;Working Directory&#xff09;、暂存区&#xff08;…

python 面对对象 类 魔法方法

魔法方法 一、__init__ 构造函数&#xff0c;可以理解为初始化 触发条件&#xff1a;在实例化的时候就会触发 class People():def __init__(self, name):print(init被执行)self.name namedef eat(self):print(f{self.name}要吃饭)a People(张三) a.eat() # in…

海外抖音TK自动挂机,手机全自动挂机,每天轻松搞2张

海外抖音TK自动挂机&#xff0c;手机全自动挂机&#xff0c;每天轻松搞2张 课程获取方式&#xff1a; https://zzmbk.com/

整理好了!2024年最常见 20 道 Redis面试题(七)

上一篇地址&#xff1a;整理好了&#xff01;2024年最常见 20 道 Redis面试题&#xff08;六&#xff09;-CSDN博客 十三、如何保证 Redis 的高可用性&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的高性能键值对数据库&#xff0c;它通常被…

揭秘Markdown:轻松掌握基础语法,让你的写作更高效、优雅!

文章目录 前言1.标题1.1 使用 和 - 标记一级和二级标题1.2 使用 # 号标记 2.段落格式2.1 字体2.2 分割线2.3 删除线2.4 下划线2.5 脚注 3.列表3.1 无序列表3.2 有序列表3.3 列表嵌套 4.区块4.1 区块中使用列表4.2 列表中使用区块 5.代码代码区块 6.链接7.图片8.表格9.高级技巧…

mysql实战——XtraBackup二进制包安装

1、二进制包下载网站 Software Downloads - Percona 2、安装xtrabackup 解压安装包 tar xvf percona-xtrabackup-8.0.27-19-Linux-x86_64.glibc2.17.tar.gz -C /usr/local 进入目录 cd percona-xtrabackup-8.0.27-19-Linux-x86_64.glibc2.17/ 安装依赖 yum install perl-Dig…

正运动视觉与运动一体机小课堂----三分钟系列

【视觉运控一体机小课堂】三分钟搭建机器视觉开发环境-正运动技术 (zmotion.com.cn) 【视觉运控一体机小课堂】三分钟读取本地图像-正运动技术 (zmotion.com.cn) 【视觉运控一体机小课堂】三分钟实现相机采集和图像保存-正运动技术 (zmotion.com.cn) 【视觉运控一体机小课堂…

java里面反射和动态代理的基础知识

反射 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的工具&#xff0c;它允许程序在运行时检查和修改类、接口、字段和方法等元数据的行为。通过反射&#xff0c;你可以加载类、实例化对象、调用方法、获取和修改字段的值等&#xff0c;而无需在编译…

Fortran: stdlib标准库

Fortran 标准库 stdlib_logger,stdlib_error, stdlib_sorting,stdlib_optval模块挺好用 封装 stdlib_logger和stdlib_error: M_logger.F90 module M_loggeruse stdlib_loggeruse stdlib_error containssubroutine info(message,module,procedure)character(len*),intent(in):…