Java Executor Service 使用要注意的一点

Java ScheduledExecutorService 使用学习 Java 中的 ScheduledExecutorService 接口用来实现延迟执行或者定时执行的任务。在阅读 RocketMQ 源码(release-4.7.1版本)的过程中,发现很多地方都是使用的 ScheduledExecutorService 来实现定时任务。比如,在 broker 启动过程,BrokerController 类中使用 scheduledExecutorService 执行 broker 启动后的定时任务,比如消息消费偏移量 offset 的持久化定时任务,大致如下... 阅读详情

最近公司一个系统遇到了奇怪的问题,一个scheduled task在系统启动后第二天就自动消失了,立马让我想起来前年在另外一个系统中使用hazelcast的时候也遇到了类似的问题(http://blog.youkuaiyun.com/cloud_ll/article/details/37695889),当时对Java Scheduled Task了解不够,没有查明白为什么。这一次终于明白了为什么。Java Executor Service对于提交的任务如果遇到了没有处理的异常,就会认为任务遇到了不可预知的错误,理所当然就会中止执行。不过在Java Executor Service在终止的时候没有任何提示。。。

在我们现在这个系统中我们提交的任务如下:

service.scheduleAtFixedDelay(new Runnable() {
           publicvoid run() {
               try{
                  .......
               } catch (Exception e){
                  LOG.error("unexpected error!",e");
               }
           }
        }, 0, 5, TimeUnit.SECONDS);

可以看到我们已经处理了异常,为什么还会出问题呢?很简单出的是Error。。。OutOfMemoryError: Direct buffer memory……
所以catch从exception变成了throwable,并且分析转到了为什么会出现Direct buffer memory allocation Error。

这样回过头来看之前遇到的hazelcast那个问题,也是没有处理异常导致task被中止了。修改如下,不知道hazelcast后来解决了这个问题没。

node.executorManager.getScheduledExecutorService().scheduleAtFixedRate(new Runnable() {
           public void run() {
             try{
               for (CMap cMap : maps.values()) {
                   cMap.startCleanup(false);
               }
             } catch (Throwable e){
               LOG.error("unexpected error!",e);
             }
           }
        }, 1, 1, TimeUnit.SECONDS);
Spark架构深度解析:Driver-Executor协作与Shuffle内存机制 Apache Spark 不是简单的内存计算引擎,而是一套分层抽象与动态契约并存的分布式执行框架。其核心在于 Driver 与 Executor 的协同调度机制、Shuffle 数据流动的生命线设计,以及 Execution/Storage/User 三层内存的弹性博弈。理解 Catalyst 优化器如何将逻辑计划坍缩为物理算子,掌握 Tungsten 引擎对 UnsafeRow 和序列化的底层控制,才能真正规避 OOM、Stage 卡顿和资源争抢等典型问题。本文聚焦 Spark 架构本质,覆盖微批流处理抽 阅读详情

相关推荐

Tomcat调优Service

本文皆为tomcat配置文件server.xm中Service模块配置优化。

qq_24973007的博客 1307

Java线程池ExecutorService的使用

开篇前,我们先来看看不使用线程池的情况: new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? 1 2 3 4 5 6 7 newThread(newRunnable() { @Override publicvoidrun() { ...

daxiaoge111的博客 337

ROS2 Service深度解析:从RPC原理到工业级稳定实践

Service是ROS2中实现远程过程调用(RPC)的核心机制,本质是同步、有状态、带响应的功能接口,区别于Topic的数据流模型。其底层基于DDS的Request-Reply通信范式,通过隐式生成的_Request/_Response双Topic完成消息传递。技术价值在于支撑控制、查询、配置等需结果确认的关键操作,广泛应用于机械臂指令触发、参数动态更新、系统健康检查等实时性与可靠性要求高的工业场景。本文结合AGV调度、无人机编队与分拣机器人实战经验,深入剖析Service生命周期管理、QoS策略影响、跨语

anheku1562的博客 479

致命陷阱:Redisson中RExecutorService嵌套任务响应丢失问题深度剖析与解决方案

你是否曾遇到过这样的困境:在使用Redisson的分布式执行服务(RExecutorService)时,外层任务正常完成,但嵌套提交的子任务却"石沉大海",没有任何响应也无法追踪?这种隐藏在分布式任务调度中的陷阱,可能导致数据不一致、业务逻辑中断,甚至引发生产环境故障。本文将从问题现象出发,通过源码解析和场景复现,彻底解决这一棘手问题,让你掌握分布式任务嵌套执行的正确姿势。 ## 问题现象:嵌套...

gitblog_00976的博客 341

MATLAB 2022b 用户专属:保姆级IPOPT求解器安装配置全流程(含OPTI工具箱)

本文为MATLAB 2022b用户提供IPOPT求解器的详细安装与配置指南,涵盖OPTI工具箱的适配安装、环境变量设置及常见问题解决方案。通过实战案例演示非线性优化问题的求解过程,帮助用户高效部署这一强大的优化工具,提升工程计算效率。

weixin_29092031的博客 405

AlphaFold2算法详解

正文:https://www.nature.com/articles/s41586-021-03819-2 补充文件:https://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/MediaObjects/41586_2021_3819_MOESM1_ESM.pdfhttps://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/Med

Daisy4的博客 1万+

Java多线程的ScheduledExecutorService使用

ScheduledExecutorService使用(一)定时任务的几种方案介绍(二)ScheduledExecutorService介绍(三)ScheduledExecutorService的使用3.1 schedule()使用 (一)定时任务的几种方案介绍 使用java做一个后台的定时任务,方案可以有如下几种: 1、JDK自带的Timer 2、JDK1.5+ 新增的ScheduledExecutorService 3、Quartz :简单却强大的JAVA作业调度框架,可以支持动态的Cron语法 (二)S

qq_1763467007的博客 9492

24. 在QML界面中嵌入QWidget窗口

目前QT官方主推的界面开发方式是采用QML进行界面设计,但在QML未流行之前,很多的项目都是采用QWidget开发的,把之前的代码全部转换为QML代码显然工作量非常大,如果能将QWidget窗口嵌入到QML界面中,那么开发效率将提高很多,且QML无法实现的功能也能借助于QWidget框架进行实现。

山间点烟雨 5921

【Java】定时器ScheduledExecutorService

ScheduledExecutorService是一个定时器,可以用来将任务安排在指定的时间后执行,或者周期性的执行一个任务。

qq_53070263的博客 5071

【目录】专栏文章导航

从最强工具链Davinci Configurator模块学习出发掌握AUTOSAR

weixin_47571898的博客 3286

mapbox 从入门到精通 - 目录

欢迎大家来到gis分享者的《mapbox 从入门到精通》专栏。博主列出学习大纲,如果有什么问题,欢迎留言。

我哎GIS博客 5833

Apache Ignite 关于 **Executor Service(执行器服务)** 的介绍

摘要:Apache Ignite 的 Executor Service 是一个分布式任务调度框架,功能类似于跨多台服务器的线程池。它允许将任务(Runnable/Callable)分发到集群中的任意节点执行,提供负载均衡和容错能力。与Java原生线程池不同,它支持通过Cluster Group控制任务执行范围,实现工作负载隔离。典型应用场景包括并行计算、后台任务调度等,但需注意任务必须可序列化且日志分散在各节点。该服务通过智能调度将任务自动分配给集群节点,显著提升分布式计算效率。

m0_37607945的博客 952

第14.8章 高翔博士最新开源框架Lightning-LM源码解读(八):位姿平滑器PoseSmoother深度剖析,从原理到代码实现

本文深度解析了高翔博士开源框架Lightning-LM中的位姿平滑器PoseSmoother模块。该模块通过设置平滑因子,在保证位姿准确性的同时减少突变,使位姿变化更平稳。文章详细讲解了模块功能、数据流程和核心代码实现,包括构造函数、拷贝构造函数以及关键的PushDRPose和PushPose函数。重点分析了位姿平滑算法原理,涉及运动有效性校验、位姿队列维护和平滑因子调节等核心机制。此外还介绍了相关C++语法(如显式构造函数、默认拷贝构造)和优化方向。本解析为SLAM学习者提供了位姿平滑处理的实用实现范例。

行知SLAM 600

Java中Executor、ExecutorService、ThreadPoolExecutor介绍

1.Excutor 源码非常简单,只有一个execute(Runnable command)回调接口 public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in

lamb7758的博客 761

VAY 是 SAP 自动科目确定(OBYC-GBB)中的科目修改码,专用于带科目分配对象的销售订单发货场景,核心是触发 “Dr 成本要素科目(如销售费用 / 特定成本对象) Cr 库存商品” 的分录,

摘要:VAY是SAP中用于带科目分配对象(如成本中心、WBS)的销售订单发货的科目修改码,与标准VAX场景不同,它生成"借成本要素科目/贷库存商品"的分录。配置路径为OBYC-GBB-VAY,需确保借方科目为成本要素。典型业务场景包括免费样品、项目专用发货等。常见问题包括VAY未触发或科目记账错误,需检查销售订单科目分配、移动类型设置及OBYC配置。特殊场景建议单独配置科目以便费用分析。

金牌架构师 1252

【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤

Windows 11 安装 WSL2 和 Ubuntu 22.04 指南 本文详细介绍在 Windows 11 上安装 WSL2 和 Ubuntu 22.04 的完整步骤,包括: WSL2 与 VirtualBox 的性能对比优势 系统版本检查与升级方法 两种安装方式(一键安装和手动安装) Ubuntu 22.04 的安装与配置 存储位置管理及迁移技巧 常用 WSL2 命令速查表 文章还提供了性能优化建议和常见问题解决方案,适合开发者和 Linux 爱好者快速搭建高效的开发环境。

No8g攻城狮的博客 2万+

AsyncTask,ThreadPoolExcutor,Service的简单使用和适用范围

AsyncTask,ThreadPoolExcutor,Service的简单使用和适用范围AsyncTask是Google封装的一个异步处理类,通过实现内部的doInBackGround方法就能实现子线程进行耗时操作AsyncTask的简单实现 public class multiThreadTask extends AsyncTask<Void,Void,Void>{ //不必须执行

u014021842的博客 675

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

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

java线程池深入讲解_深入java线程池的使用详解

在Java 5.0之前启动一个任务是通过调用Thread类的start()方法来实现的,任务的提于交和执行是同时进行的,如果你想对任务的执行进行调度或是控制 同时执行的线程数量就需要额外编写代码来完成。5.0里提供了一个新的任务执行架构使你可以轻松地调度和控制任务的执行,并且可以建立一个类似数据库连接 池的线程池来执行任务。这个架构主要有三个接口和其相应的具体类组成。这三个接口是Executor,...

weixin_34438539的博客 152

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java 线程池 配置文件_springmvc配置线程池Executor做多线程并发操作的代码实例

加载xml文件在ApplicationContext.xml文件里面添加xmlns:task="http://www.springframework.org/schema/task"xmlns文件并且xsi:schemaLocation中添加在spring中配置Executor在ApplicationContext.xml文件里面添加在dbconfig.properties添加maxOpenPre...

weixin_39620334的博客 385

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Tomcat学习笔记(3)- Server组件与Service组件

目录1. Server1.1 Server组件的作用 Server组件和Service组件是Tomcat核心组件中最外层级的两个组件,Server组件可以看成Tomcat的运行实例的抽象,而Service组件则可以看成Tomcat内的不同服务的抽象。 1. Server 请看:home/conf/server.xml文件 Server组件是代表整个Tomcat的Servlet容器,从server.xml配置文件也可以看出它属于最外层组件。 默认配置了五个Listener: GlobalNamingR

littlewhitevg的博客 758

Azkaban-3.51.0裸机安装实战:从零部署Web+Executor+MySQL三体架构

Azkaban作为轻量级批处理工作流调度系统,其核心价值在于极简部署契约与强环境可控性。它不依赖Kubernetes或ZooKeeper,仅需Java运行时、关系型数据库(如MySQL)和基础文件系统即可构建完整调度能力。原理上采用Web Server(调度中枢)、Executor Server(执行单元)与Database(元数据中枢)三体协同架构,通过HTTP+JDBC松耦合通信,规避了容器网络配置陷阱与高级抽象带来的黑盒风险。技术价值体现在离线环境快速验证、小规模数仓冷启动及客户侧隔离网络等强约束场景

weixin_30608503的博客 476

2026年Java云原生与分布式系统面试趋势解析

云原生和分布式系统是当前企业级Java开发的核心技术方向。从技术原理来看,云原生通过容器化、微服务和动态编排实现弹性扩展,而分布式系统则依赖一致性协议和事务管理保证数据可靠性。这些技术显著提升了系统的可伸缩性和容错能力,在电商、金融等高频交易场景中尤为重要。随着Kubernetes和Service Mesh的普及,Java开发者需要掌握容器化部署、服务网格集成等云原生实践。同时,分布式事务方案如Saga模式、Redis集群优化等成为面试热点。本文基于2026年最新面试数据,重点解析云原生Java开发、分布式

weixin_34408717的博客 356

ExecutorService | Executor框架

Excutor框架结构图:   上一篇讲了Executor接口,本篇来讲一下ExecutorService接口,从图中可以看出ExecutorService扩展了Executor接口,一般扩展后,都会新增一些功能方法,它有哪些新方法呢?     一:关于ExecutorService的源码 package java.util.concurrent; import java.uti...

跑龙套@程序 239

tomcat 配置文件server.xml 详解 Connector Engine Host Context

目录 一 server.xml 1.1 server 配置 1.2 service 配置 1.3 Executor 1.4 Connector 配置 1.5 Engine 其他tocmat 文章 一 ...

weixin_30726161的博客 1321

java使用线程池处理异步

spring boot 异步,线程池,多线程

weixin_44039105的博客 1068

java线程池之Executors

线程池 vs 线程 线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配、调优和监控,有以下好处: 降低资源消耗; 提高响应速度,线程池降低了线程创建和收回的开销; 提高线程的可管理性; Executors框架 要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的。现在我们来思考这么几...

码蹄疾 761
上一篇: Spring Profile基本使用
下一篇: Java Max Direct Memory Size设置
开心的D哥
博客等级 码龄22年 63粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值