java.util.concurrent.RejectedExecutionException异常的正确解决方法,亲测有效,嘿嘿嘿

生产环境 java.util.concurrent.RejectedExecutionException: event executor terminated 错误分析 今天运维在执行线上功能时发现服务异常,跟进之后发现Redis出现问题,如下: [ERROR] [2022-05-26 00:05:01.518] [c.q.d.utils.DataAccessSampleRedisUtil:326][Thread-154] 服务名称:ivdg-data-access-service--> 查询缓存数据出错:Unknown redis exception; nested exception is java.util.concurrent.RejectedExecu. 阅读详情

问题分析

java.util.concurrent.RejectedExecutionException 是 Java 并发编程中常见的异常之一,它通常发生在使用 ExecutorService(如 ThreadPoolExecutor)执行任务时,当任务无法被提交到线程池执行时就会抛出此异常。这通常意味着线程池已经达到其最大容量,或者已经关闭,无法再接受新的任务。

报错原因

  1. 线程池已满:当线程池中的线程数量已经达到其配置的最大值(corePoolSize + maximumPoolSize),并且工作队列也满了,此时再尝试提交新任务就会抛出 RejectedExecutionException。

  2. 线程池已关闭:如果线程池已经被 shutdown() 或 shutdownNow() 方法关闭,并且已经执行完所有任务或者等待的任务被中断,此时再提交新任务也会抛出此异常。

解决思路

  1. 调整线程池参数:根据应用的实际情况,合理调整线程池的大小(corePoolSize、maximumPoolSize)、工作队列的大小以及拒绝策略等参数。

  2. 优化任务处理逻辑:减少任务的执行时间,提高任务处理效率,避免大量任务长时间占用线程池资源。

  3. 使用其他并发策略:如果线程池不适合当前的应用场景,可以考虑使用其他并发策略,如使用 ForkJoinPool、CompletableFuture 或 Actor 模型等。

  4. 处理拒绝策略:为线程池配置合适的拒绝策略,如使用 ThreadPoolExecutor.CallerRunsPolicy 策略,让提交任务的线程自己执行该任务。

解决方法

下滑查看解决方法

方法一:调整线程池参数
// 假设原来的线程池配置不合理,现在进行调整
ExecutorService executorService = new ThreadPoolExecutor(
    5, // corePoolSize
    10, // maximumPoolSize
    60, // keepAliveTime
    TimeUnit.SECONDS,
    new ArrayBlockingQueue<>(100) // 工作队列大小
);

// ... 使用 executorService 提交任务

// 当不再需要线程池时,关闭它
executorService.shutdown();
方法二:优化任务处理逻辑

这通常涉及到代码逻辑的优化,比如减少任务执行时间、避免不必要的阻塞操作等。这里不直接给出代码示例,因为具体实现取决于应用的具体需求。

方法三:使用其他并发策略

使用 ForkJoinPool 示例:

ForkJoinPool forkJoinPool = new ForkJoinPool();
forkJoinPool.submit(() -> {
    // 执行任务的代码
    return null;
});

// 当不再需要 ForkJoinPool 时,可以调用 shutdown 方法
forkJoinPool.shutdown();
方法四:处理拒绝策略

为线程池配置 CallerRunsPolicy 拒绝策略:

ExecutorService executorService = new ThreadPoolExecutor(
    5, // corePoolSize
    10, // maximumPoolSize
    60, // keepAliveTime
    TimeUnit.SECONDS,
    new ArrayBlockingQueue<>(100), // 工作队列大小
    new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
);

// ... 使用 executorService 提交任务

// 当不再需要线程池时,关闭它
executorService.shutdown();

在这个配置下,如果线程池无法接受新的任务,将会由提交任务的线程自己来执行该任务。这样可以避免抛出 RejectedExecutionException,但也可能导致提交任务的线程被阻塞,从而影响应用的响应性能。因此,在选择拒绝策略时需要权衡利弊。

java.util.concurrent.RejectedExecutionException异常 场景 业务一切正常,突然收到一堆告警,发现全是 java.util.concurrent.RejectedExecutionException异常报错。 具体看了下代码,里面的执行逻辑也不难,没有外部依赖都是内存多线程cpu类型计算的逻辑。 下面是报错的线程池状态变化,由上到下,按照时间增长,最后达到饱和。 java.util.concurrent.ThreadPoolExecutor@57b5ea0f[Running, pool size = 99, active threads = 75, queued 阅读详情

相关推荐

Java并发编程系列30:抛出异常 java.util.concurrent.RejectedExecutionException

1、背景介绍 Java使用线程池newFixedThreadPool针对算法进行并发测试时,出现以下错误java.util.concurrent.RejectedExecutionException Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task com.cipherxxxcrypto.pertest.SM4PerTest$DecTask@76ed5528 rejected from ja

fen_fen的专栏 9783

1]解决java.util.concurrent.RejectedExecutionException

今天学习了java的并发,线程池,同一时间执行一个操作。 报错:java.util.concurrent.RejectedExecutionException,排查发现是等待队列设小了,导致 拒绝策略,当队列满时,处理策略报错异常。 上代码: package aqs; import java.util.concurrent.*; /** * @author WHM * 实现指定时间内做一定事情 * @date 2021年08月06日 16:27 */ public class Cou

6个日的博客 2万+

正确解决java.util.concurrent.RejectedExecutionException异常的有效解决方法

正确解决java.util.concurrent.RejectedExecutionException异常的有效解决方法

wbajsjhhhhh的博客 2900

关于java.util.concurrent.RejectedExecutionException: event executor terminated

多线程

baidu_37366055的博客 2万+

【CubeMX】STM32G474 HRTIM 死区时间与互补PWM实战解析

本文深入解析STM32G474的HRTIM高分辨率定时器在互补PWM生成与死区时间配置中的应用。通过CubeMX工具详细演示时钟配置、单路PWM基础、互补输出与死区时间设置,并结合逆变器等电力电子实战案例,帮助开发者避免直通风险,优化系统性能。

efc12345678的博客 745

Cartographer全局重定位优化:无初始位姿约束的2万平工厂秒级定位实践

本文深入解析了Cartographer在2万平工业场景中的全局重定位优化实践,通过分支定界优化、子图动态加载和多传感器融合等关键技术,实现了无初始位姿约束下的秒级重定位。特别针对大场景下的快速重定位需求,优化后的系统在RK3588平台上表现出色,定位耗时从47秒降至1.8秒,成功率提升至91%,为工业自动化提供了高效解决方案。

rose2的博客 968

已解决java.util.concurrent.RejectedExecutionException异常的正确解决方法,亲测有效!!!

已解决java.util.concurrent.RejectedExecutionException异常的正确解决方法,亲测有效!!!

小明的Java问道之路 1万+

E5071C 网络分析仪使用指南

E5071C 网络分析仪是 Keysight(原 Agilent)推出的一款高性能矢量网络分析仪,广泛应用于射频(RF)和微波(MW)电路设计、天线测试、滤波器优化等领域。它以高精度、宽频率范围(9 kHz–20 GHz)、出色的动态范围和灵活的测量功能著称。本文将详细介绍 E5071C 的基本操作方法,帮助用户快速上手并高效使用该设备。

2501_90901792的博客 4182

【Java】已解决java.util.concurrent.RejectedExecutionException异常

java.util.concurrent.RejectedExecutionException是Java并发编程中常见的一个异常,它通常发生在使用ExecutorService(如ThreadPoolExecutor)执行异步任务时,当任务提交到线程池但线程池无法处理新任务(比如,因为已经关闭了或者达到了其最大容量)时,就会抛出此异常。在这个例子中,我们使用了ThreadPoolExecutor的构造函数来创建一个线程池,并指定了一个CallerRunsPolicy的拒绝策略。

屿小夏.的知识博客 2323

BUPT软件安全实验三

可以看出栈溢出对程序运行的安全性有很大的威胁,如果不对栈进行保护,只要系统中存在栈溢出漏洞,即可令攻击者通过非正当方法获取操作权限。(6)解决思考题,即:在不修改StackOverrun程序源代码的情况下,构造shellcode,通过JMP ESP的方式实现通过记事本打开shellcode.txt(可使用CreateProcessA或WinExec等API)。查看缓冲区信息,可以看到dest指向地址0x0012FAF0,其为数组的存放起始位置,也就是shellcode注入的起始位置。

7xun's space 1965

别只盯着Spectre!Cadence Virtuoso里APS和Spectre X该怎么选?一份给模拟IC新手的指南

本文深入解析Cadence Virtuoso中的三大仿真引擎Spectre、APS和Spectre X,帮助模拟IC新手根据电路规模、精度需求和计算资源做出智能选择。通过对比技术指标和应用场景,提供射频电路、混合信号系统和电源管理IC的优化仿真策略,显著提升设计效率。

weixin_26841743的博客 703

解决java.util.concurrent.RejectedExecutionException

前言 昨晚12:00运行自动化测试脚本时遇到了java.util.concurrent.RejectedExecutionException这个异常,从异常名称里很容易分析出是提交的任务被线程池拒绝了。查看源码发现是在Activity里,AsyncTask是在自定义的线程池的运行的,但是onDestory函数里确是先显示调用了线程池的shutdown方法,然后才是AsyncTask的cancel

小一的专栏 19万+

华为OD机考双机位C卷 - 区间交集(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 区间交集

算法大师! 1136

77 关于 java.util.concurrent.RejectedExecutionException:Thread limit exceeded replacing blocked worker

前言 呵呵 之前项目中会存在这样的一个情况 选择多个文件导入 : 假设选择多个文件(一般是十个以上), 偶尔会抛出如下异常, 呵呵 和 redis 相关, 但是看异常信息RejectedExecutionException 抛出的地方 又是在forkjoin 库里面 呵呵 这两者有什么关联呢? 这里就来看看, 呵呵 forkjoin 这部分的类库 有一些博大精深, 多久还得仔细看看, 说实话 看起来 还是很有难度 我这里 只是从解决问题的角度, 看了一些, 但是 但是还有很多不明白的地方...

970655147的专栏 9035

001、专栏导论:为什么我们需要MLIR与算子中间表示

五年前,大家还在争论“TVM还是XLA”。现在回头看,TVM的Relay IR和XLA的HLO都是特定领域的IR,它们解决了各自的问题,但缺乏通用性。MLIR的出现,本质上是因为硬件异构化已经到了一个临界点——CPU、GPU、NPU、DSP、FPGA,每个硬件都有自己的指令集和内存层次,没有一个统一的IR能同时高效表达所有硬件的计算模式。MLIR的“方言+渐进式lowering”模式,恰好提供了这种灵活性。你可以为每个硬件定制一套方言,然后共享公共的lowering路径。

Jack010169的博客 485

Android15车载系统开机冷启动流程源码解析

本文主要介绍Android15车机系统开机冷启动的流程,暂不包含bootloader,仅从kernel开始直至Launcher首页展示。

jidapenglin28的专栏 253

java.util.concurrent.RejectedExecutionException: event executor terminated解决方法之一

INFO | jvm 1 | 2017/03/09 19:45:10 | java.util.concurrent.RejectedExecutionException: event executor terminated INFO | jvm 1 | 2017/03/09 19:45:10 | at io.netty.util.concurrent.SingleTh...

weixin_34113237的博客 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

解决:java.util.concurrent.RejectedExecutionException

当前这个系统这个线程池的线程是用来处理传的是状态,大概有2千个设备,高峰期这2千个设备同时或不断发送状态信息过来,很多状态信息是重复的而且变化时间一般十几分钟,大多数信息基本是同样的状态可以忽略不处理,所以这个错误在这种业务环境下是不影响业务,也可以忽略不调整的。像这种 RejectedExecutionException 错误,表明在Java应用程序中,一个任务尝试提交到线程池()去执行时被拒绝了,具体原因是线程池达到了其配置的容量限制,无法接纳更多的任务。

qyhua的专栏 2104

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java.util.concurrent.RejectedExecutionException

java.util.concurrent.RejectedExecutionException Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@6f94fa3e rejected from java.util.concurrent.ThreadPoolExecutor@5e481248[Running, pool size = 4,

weiboKDhuo的博客 894

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java.util.concurrent.RejectedExecutionException for multi AsyncTask

java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@41670928 rejected from java.util.concurrent.ThreadPoolExecutor@41523b60[Terminated, pool size = 0, active threads = 0, queu

zirconsdu的专栏 1万+

【ruoyi】java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoo

前言 ruoyi 4.6.0 jdk1.8 错误 11:48:16.879 [http-nio-9031-exec-25] INFO c.r.f.s.r.UserRealm - [doGetAuthenticationInfo,128] - 对用户[admin]进行登录验证..验证未通过{} java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$Sch

sayyy的专栏 2592

Jhipster 解决java.util.concurrent.RejectedExecutionException

基础框架 : 基于springboot1.5的JHipster框架   报错异常 :java.util.concurrent.RejectedExecutionException 提交的任务被线程池拒绝了... 这里有三个基本概念   ThreadPoolExecutor将根据corePoolSize和maxPoolsize设置的边界自动调整池大小.当新任务在方法execute(j...

YoungLee16的博客 701

java util concurrent_关于 java.util.concurrent.RejectedExecutionException

遇到java.util.concurrent.RejectedExecutionException目前看来,最主要有2种原因。第一:你的线程池ThreadPoolExecutor 显示的shutdown()之后,再向线程池提交任务的时候。如果你配置的拒绝策略是AbortPolicy的话,这个异常就会抛出来。第二:当你设置的任务缓存队列过小的时候,或者说, 你的线程池里面所有的线程都在干活(线程数=...

weixin_39779528的博客 641
上一篇: 亲测有效java.net.ProtocolException异常的正确解决方法,嘿嘿嘿
下一篇: java.lang.UnsatisfiedLinkError异常的正确解决方法,亲测有效嘿嘿嘿
代码无疆
博客等级 码龄3年 4万+粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值