当前位置: 首页 > news >正文

Java线程池的抛弃策略

Java线程池的抛弃策略

Java线程池是Java并发编程中非常重要的一个组件。它通过重用已创建的线程来减少线程创建和销毁的开销,从而提高应用程序的性能和响应速度。然而,当线程池中的任务数量超过其处理能力时,就需要一种机制来处理新提交的任务,这就是线程池的抛弃策略。

线程池的抛弃策略(Rejection Policy)是指当线程池无法接受新的任务时,如何处理这些任务的策略。通常,线程池在以下两种情况下会拒绝新的任务:

  1. 当线程池已达到最大线程数,且所有线程都在忙碌中。
  2. 当任务队列已满,无法容纳更多的任务。

常见的抛弃策略

Java提供了几种内置的抛弃策略,分别是:

AbortPolicy

AbortPolicy 是默认的抛弃策略。当任务被拒绝时,线程池会抛出一个 RejectedExecutionException 异常。这个策略通常用于希望调用者能够意识到任务被拒绝,并且可以进行相应处理的场景。

ExecutorService executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, workQueue, new ThreadPoolExecutor.AbortPolicy()
);

DiscardPolicy

DiscardPolicy 直接丢弃被拒绝的任务,不予任何处理或通知。这种策略适用于对丢弃任务不敏感的场景。

ExecutorService executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, workQueue, new ThreadPoolExecutor.DiscardPolicy()
);

DiscardOldestPolicy

DiscardOldestPolicy 将丢弃队列中最旧的任务,然后尝试重新提交被拒绝的任务。这种策略适用于需要优先处理新任务的场景。

ExecutorService executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, workQueue, new ThreadPoolExecutor.DiscardOldestPolicy()
);

CallerRunsPolicy

CallerRunsPolicy 由调用者线程处理被拒绝的任务。这种策略可以降低新任务提交的速度,从而减少任务被拒绝的可能性,适用于希望尽量不丢弃任务的场景。

ExecutorService executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, workQueue, new ThreadPoolExecutor.CallerRunsPolicy()
);

自定义抛弃策略

除了内置的抛弃策略,开发者还可以实现 RejectedExecutionHandler 接口来自定义抛弃策略。例如,可以将被拒绝的任务记录到日志中,或者放入一个备用队列中以备后续处理。

public class CustomRejectedExecutionHandler implements RejectedExecutionHandler {@Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {// 自定义处理逻辑,例如记录日志或放入备用队列System.out.println("Task " + r.toString() + " rejected from " + executor.toString());}
}ExecutorService executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, timeUnit, workQueue, new CustomRejectedExecutionHandler()
);

选择合适的抛弃策略

选择合适的抛弃策略需要根据应用程序的具体需求和场景来定。例如:

  • 如果希望调用者能够处理被拒绝的任务,可以选择 AbortPolicyCallerRunsPolicy
  • 如果任务可以被安全地丢弃,可以选择 DiscardPolicyDiscardOldestPolicy
  • 如果需要对被拒绝的任务进行特殊处理,可以实现自定义的抛弃策略。

在这里插入图片描述

相关文章:

Java线程池的抛弃策略

Java线程池的抛弃策略 Java线程池是Java并发编程中非常重要的一个组件。它通过重用已创建的线程来减少线程创建和销毁的开销,从而提高应用程序的性能和响应速度。然而,当线程池中的任务数量超过其处理能力时,就需要一种机制来处理新提交的任…...

【python】Sklearn—Cluster

参考学习来自 10种聚类算法的完整python操作示例 文章目录 聚类数据集亲和力传播——AffinityPropagation聚合聚类——AgglomerationClusteringBIRCH——Birch(✔)DBSCAN——DBSCANK均值——KMeansMini-Batch K-均值——MiniBatchKMeans均值漂移聚类——…...

测试开发面经分享,面试七天速成 DAY 1

1. get、post、put、delete的区别 a. get请求: i. 用于从服务器获取资源。请求参数附加在URL的查询字符串中。 ii. 对服务器的请求是幂等的,即多次相同的GET请求应该返回相同的结果。 iii. 可以被缓存,可以被收藏为书签。 iv. 对于敏感数据不…...

C++ Primer Plus第五版笔记(p201-250)

第六章 函数(下) 在含有return语句的循环后面应该也有一条return语句 不要返回局部对象的引用或指针,当函数结束时临时对象占用的空间也就随之释放掉了,所以两条return语句都指向了不再可用的内存空间。 如果函数返回指针、引用…...

vba学习系列(5)--指定区域指定字符串计数

系列文章目录 文章目录 系列文章目录前言一、需求背景二、vba自定义函数1.引入库 总结 前言 一、需求背景 想知道所有客诉项目里面什么项目最多,出现过多少次。 二、vba自定义函数 1.引入库 引用: CountCharInRange(区域,“字符串”) Function CountCh…...

将Firefox插件导入Edge/Chrome中

目录 将Firefox插件导入Edge/Chrome中前言导出火狐插件.xpi格式插件导入edge/chorme中错误示范1错误示范2修改过程manifest.jsondict文件夹修改backgroundScript.jsinjectedScript.jsdebug过程最终backgroundScript.js和injectedScript.js代码 完工阶段修改后的源码 将Firefox插…...

云计算【第一阶段(14)】Linux的目录和结构

一、Liunx目录结构 1.1、linux目录结构 linux目录结构是树形目录结构 根目录(树根) 所有分区,目录,文件等的位置起点整个树形目录结构中,使用独立的一个"/",表示 1.2、常见的子目录 必须知道 目录路径目…...

Zynq学习笔记--AXI4-Stream到视频输出IP是如何工作的?

目录 1. 简介 2. 原理详解 2.1 示例工程 2.2 AXI4-Stream to Video Out 3. Master/Slave Timing Mode 3.1 Slave Timing Mode 3.2 Master Timing Mode 4. 总结 1. 简介 本文主要介绍了 AXI4-Stream 到视频输出 的内容。其中,示例工程展示了一个具体的设计&…...

2016-2023 年美国农业部作物序列边界

简介 2016-2023 年美国农业部作物序列边界 作物序列边界(CSB)是与美国农业部经济研究局合作开发的,它提供了美国毗连地区的田间边界、作物种植面积和作物轮作的估计数据。该数据集利用卫星图像和其他公共数据,并且是开放源码的,使用户能够对美国种植的商品进行面积和统计…...

数字人源码部署怎么做?如何高效搭建好用的数字人系统?

作为人工智能时代的风口项目,AI数字人自出现之日起便引发了大量的关注。不少创业者都有了搭建数字人系统的想法,但却苦于没有强大的专业背景和雄厚资金支撑,只能在局外徘徊,而这恰恰为数字人源码公司推出的数字人源码部署服务的火…...

解决虚拟机Ubuntu IP总是掉的问题

问题 嵌入式开发过程中,需要使用NFS/TFTP等等,虚拟机Ubuntu就需要和板卡进行网络连接,但是我发现虚拟机Ubuntu的IP地址经常动不动就掉线,本文记录解决该问题的一些思路。 其实这个问题很简单,我早该想到,…...

[13] CUDA_Opencv联合编译过程

CUDA_Opencv联合编译过程 详细编译过程可见我之前的文章&#xff1a;Win10下OpencvCUDA联合编译详细教程&#xff08;版本455、460、470,亲测可用&#xff01;&#xff01;&#xff01;&#xff09;本文给出Windows\linux下的opencvcuda的编译总结&#xff0c;摘自 <基于GP…...

uni-app canvas创建画布

canvasTmp: function(arr2, store_name, successFn, errFun) {let that this;const ctx uni.createCanvasContext(myCanvas);ctx.clearRect(0, 0, 0, 0);/*** 只能获取合法域名下的图片信息,本地调试无法获取* */uni.getImageInfo({ src: arr2[0],success: function(res) {…...

Spring MVC详解(上)

一、Spring MVC初步认识 1.1介绍 Spring MVC是Spring Framework提供的Web组件&#xff0c;全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架&#xff0c;提供前端路由映射、视图解析等功能 Java Web开发者必须要掌握的技术框架 1.2MVC是什么 MVC是一种软件架构思想…...

【Linux硬盘读取】Windows下读取Linux系统的文件解决方案:Linux Reader4.5 By DiskInternals

前言 相信做机器视觉相关的很多人都会安装 Windows 和 Linux 双系统。在 Linux 下&#xff0c;我们可以很方便的访问Windows的磁盘&#xff0c;反过来却不行。但是这又是必须的。通过亲身体验&#xff0c;向大家推荐这么一个工具&#xff0c;可以让 Windows 方便的访问 Ext 2/3…...

操作系统—页表(实验)

文章目录 页表1.实验目标2.实验过程记录(1).增加打印页表函数(2).独立内核页表(3).简化软件模拟地址翻译 3.实验问题及相应解答问题1问题2问题3问题4 实验小结 页表 1.实验目标 了解xv6内核当中页表的实现原理&#xff0c;修改页表&#xff0c;使内核更方便地进行用户虚拟地址…...

github 本地仓库上传及报错处理

一.本地文件上传 这里为上传部分&#xff0c;关于gitbash安装配置&#xff0c;读者可自行搜索&#xff0c;由于已经安装完成&#xff0c;未进行截图保存&#xff0c;这里便不做赘述。 1.登录git账号并创建一个仓库 点击仓库打开后会看到这个仓库的网址链接&#xff08;这个链…...

【ZZULIOJ】1104: 求因子和(函数专题)

题目描述 输入正整数n&#xff08;2<n<1000&#xff09;&#xff0c;计算并输出n的所有正因子(包括1&#xff0c;不包括自身)之和。要求程序定义一个FacSum ()函数和一个main()函数&#xff0c;FacSum ()函数计算并返回n的所有正因子之和&#xff0c;其余功能在main()函…...

轨迹优化 | 图解欧氏距离场与梯度场算法(附ROS C++/Python实现)

目录 0 专栏介绍1 什么是距离场&#xff1f;2 欧氏距离场计算原理3 双线性插值与欧式梯度场4 仿真实现4.1 ROS C实现4.2 Python实现 0 专栏介绍 &#x1f525;课程设计、毕业设计、创新竞赛、学术研究必备&#xff01;本专栏涉及更高阶的运动规划算法实战&#xff1a;曲线生成…...

【二维差分】2132. 用邮票贴满网格图

本文涉及知识点 二维差分 LeetCode2132. 用邮票贴满网格图 给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。 给你邮票的尺寸为 stampHeight x stampWidth 。我们想将邮票贴进二进制矩…...

解锁TikTok电商API:PHP开发者的零门槛接入方案

解锁TikTok电商API&#xff1a;PHP开发者的零门槛接入方案 【免费下载链接】tiktokshop-php Unofficial Tiktok Shop API Client in PHP. Use API version 202309 and later 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokshop-php 跨境电商API对接新选择&#xf…...

浅析Python中正则表达式的性能优化

在Python开发中&#xff0c;正则表达式是处理文本的利器&#xff0c;但如果使用不当&#xff0c;很容易成为性能瓶颈。尤其是在处理大文本或高频调用场景下&#xff0c;正则的执行效率直接影响整个程序的运行速度。本文将从正则匹配的底层逻辑出发&#xff0c;总结实用的性能优…...

离网逆变器下垂控制实战:从公式推导到MATLAB仿真(附资源下载)

离网逆变器下垂控制实战&#xff1a;从公式推导到MATLAB仿真 在新能源发电系统中&#xff0c;离网逆变器的稳定运行至关重要。传统电压电流双闭环控制虽然简单直接&#xff0c;但在面对复杂负载变化时&#xff0c;往往会出现电压跌落、频率失稳等问题。下垂控制技术通过模拟同…...

SubtitleOCR:重新定义视频内容处理效率的硬字幕提取革命

SubtitleOCR&#xff1a;重新定义视频内容处理效率的硬字幕提取革命 【免费下载链接】SubtitleOCR 快如闪电的硬字幕提取工具。仅需苹果M1芯片或英伟达3060显卡即可达到10倍速提取。A very fast tool for video hardcode subtitle extraction 项目地址: https://gitcode.com/…...

【手把手】FFmpeg音视频开发从入门到实战:一文吃透音视频同步原理与代码实现(附完整源码)

文章目录第一章 基础必懂&#xff1a;音视频开发的核心概念与FFmpeg框架1.1 别再被封装格式忽悠&#xff1a;MP4、MKV、AVI到底差在哪&#xff1f;1.2 搞懂解码流程&#xff1a;FFmpeg处理音视频的4个核心结构体第二章 深入原理&#xff1a;音视频同步的核心机制2.1 播放器卡顿…...

避开Codesys电子凸轮Cam表设置的3个常见坑:SMC_CAMXYVA结构体赋值与MC_CAM_REF实例化详解

Codesys电子凸轮Cam表实战避坑指南&#xff1a;从结构体赋值到功能块调优 在工业自动化领域&#xff0c;电子凸轮技术正在逐步取代传统的机械凸轮系统。作为Codesys平台下的核心运动控制功能&#xff0c;Cam表的正确配置直接关系到设备运行的精度和稳定性。本文将深入剖析手动编…...

VScode 高效开发 Springboot 应用的完整指南

1. 环境准备与项目创建 第一次用VScode开发Springboot项目时&#xff0c;我对着空白编辑器发呆了半小时。后来发现只要装对插件&#xff0c;效率能翻倍。先打开VScode的扩展商店&#xff0c;这三个插件是必装的&#xff1a; Java Extension Pack&#xff1a;包含语言支持、调…...

SWF逆向工程认证培训师手册:基于JPEXS Free Flash Decompiler的教学指南

SWF逆向工程认证培训师手册&#xff1a;基于JPEXS Free Flash Decompiler的教学指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler是一款开源的Flash SWF…...

ECharts Gallery弃用后,这4个替代网站让你轻松搞定数据可视化(附优缺点对比)

ECharts Gallery弃用后&#xff0c;这4个专业级替代方案深度评测 当ECharts官方Gallery宣布停止维护时&#xff0c;许多数据可视化开发者突然失去了一个重要的灵感来源和代码参考平台。作为国内最流行的可视化库之一&#xff0c;ECharts的生态系统中其实还隐藏着多个高质量的替…...

Mermaid在线编辑器:开源可视化工具的图表创作革命

Mermaid在线编辑器&#xff1a;开源可视化工具的图表创作革命 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor …...