Java多线程Callable实用篇
1、线程池的配置查看CompletableFuture2、业务场景为只要有一任务失败则所有任务都失败注意线程池的拒绝策略为抛出异常。2.1、重写Callableclass MyCallable implements CallableThreadResult{ private final String params; private final ThreadResult threadResult; AtomicBoolean errorFlag;//标识如果有一个任务失败则其它任务不用执行 public MyCallable(String params,AtomicBoolean errorFlag,ThreadResult threadResult){ this.params params; this.threadResult threadResult; this.errorFlag errorFlag; } //这里将异常直接抛出方便查询问题。根据实际情况处理 Override public ThreadResult call() throws Exception { //1、其中有任务失败则不需要再执行 if(errorFlag.get()){ threadResult.setCode(1000); threadResult.setMessage(cancel task handel!); return threadResult; } if(ObjectUtils.isEmpty(params)){ threadResult.setCode(1001); threadResult.setErrorMessage(param cat not be null!); return threadResult; } //2、各自的Exception由具体的代码块处理这里抛出由调用者处理 String selectSql select * from springdemo; ListMapString,Object dataList null; dataList jdbcTemplate.queryForList(selectSql); Thread.sleep(1000); //测试场景模拟抛错 if(3000.equals(params)){ throw new RuntimeException(handle test : callable runtime exception!); } StringBuilder sb new StringBuilder(); if(!ObjectUtils.isEmpty(dataList)){ for(MapString,Object dataMap : dataList){ sb.append(number:).append(dataMap.get(number)).append(,name:).append(dataMap.get(name)); } } //标识执行成功 threadResult.setStatus(true); return threadResult; } }2.2、调用public String callableInvokeAllDemo() { IPrintUtil.print( begin: available queue : myThreadPool.getQueue().remainingCapacity()); int count 9000; //报错标识 AtomicBoolean errorFlag new AtomicBoolean(false); //新建任务 ListCallableThreadResult callableList new ArrayList(); for(int i0;icount;i){ ThreadResult result new ThreadResult(); //listResult.add(result); callableList.add(new MyCallable(i,errorFlag,result)); } //开始提交任务并执行 ListFutureThreadResult futures new ArrayList(); //第1关键点线程池提交任务时要处理线程池满的情况。如果是直接抛出异常 try{ for(CallableThreadResult callable : callableList) { FutureThreadResult futureResult myThreadPool.submit(callable); futures.add(futureResult); } } catch (RejectedExecutionException e){ //1、告诉执行任务不需要再执行了 errorFlag.set(true); //2、尝试停止正常执行的任务 for(FutureThreadResult f: futures) { if(!f.isDone()){ f.cancel(true); } } //3、业务处理根据实际情况处理。这里直接抛出异常 throw new RuntimeException(e.getMessage()); } //获取执行结果这里会有一个问题就是第一个任务结果执行很久则线程会卡住 String errorMessage ; for(FutureThreadResult future : futures) { try { if (future.isCancelled()) { //标识其它任务不需要再执行 errorFlag.set(true); IPrintUtil.print(Thread Id : Thread.currentThread().getId() isCancelled); //其它任务不需要再获取结果 break; } else { IPrintUtil.print(Thread Id : Thread.currentThread().getId() isDone); } //设置一个超时时间 ThreadResult res future.get(30,TimeUnit.MINUTES); //如果有执行失败则其它任务不需要再执行 if(!res.isStatus()) { errorFlag.set(true); errorMessage res.getMessage(); //其它任务不需要再获取结果 } } catch (InterruptedException e) { IPrintUtil.print(e.getMessage()); IPrintUtil.print(e1); //标识其它任务不需要再执行 errorFlag.set(true); errorMessage e.getMessage(); break; } catch (ExecutionException e) { IPrintUtil.print(e.getMessage()); IPrintUtil.print(e2); //标识其它任务不需要再执行 errorFlag.set(true); errorMessage e.getMessage(); break; } catch (Exception e){ IPrintUtil.print(Thread Id : Thread.currentThread().getId() exception 3 is : e.getMessage()); IPrintUtil.print(e3); //标识其它任务不需要再执行 errorFlag.set(true); errorMessage e.getMessage(); break; } } //任务执行失败 if(errorFlag.get()){ //尝试取消任务 for(FutureThreadResult future : futures) { if(!future.isDone()){ IPrintUtil.print(-------cancel task-------); future.cancel(true); } } //这里看具体情况处理 //throw new Exception(errorMessage); return error: errorMessage; } return success; }

相关新闻

深度解析YimMenu:模块化安全防护架构与Lua扩展开发实战指南

深度解析YimMenu:模块化安全防护架构与Lua扩展开发实战指南

深度解析YimMenu:模块化安全防护架构与Lua扩展开发实战指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi…

2026/7/30 19:35:05 阅读更多 →
Vue 3生态革新:基于Vuetify的企业级管理界面完整解决方案

Vue 3生态革新:基于Vuetify的企业级管理界面完整解决方案

Vue 3生态革新:基于Vuetify的企业级管理界面完整解决方案 【免费下载链接】materio-vuetify-vuejs-admin-template-free Production Ready, Carefully Crafted, Extensive Vuetifty Free Admin Template 🤩 项目地址: https://gitcode.com/gh_mirrors/…

2026/7/30 19:35:05 阅读更多 →
深圳谷歌SEO公司推荐:大鱼营销——长效排名的实干家

深圳谷歌SEO公司推荐:大鱼营销——长效排名的实干家

当您寻找能实现“长效排名”的谷歌SEO服务时,核心选择标准应是:对谷歌算法演化逻辑的深度理解与持续的内容生态构建能力。大鱼营销凭借其创始人十余年对谷歌算法的深耕经验,以及自主开发的AI智能系统,将这两点做到了极致。大鱼营销…

2026/7/30 19:35:05 阅读更多 →

最新新闻

聊天入口跨系统权限管理的安全风险与可控方案

聊天入口跨系统权限管理的安全风险与可控方案

随着《数据安全法》的全面施行,政企组织的合规水位被系统性抬升。从等保 2.0 的“安全可控”到数据安全法的“可追溯、可自证”,跨系统访问审计的刚性要求发生了本质变化:过去只需要证明“做了防护”,现在必须证明“谁能访问、访问…

2026/7/30 21:49:52 阅读更多 →
.NET+AI | MCP | MCP 2.0 正式发布:AI 应用接入协议,开始进入「云原生时代」

.NET+AI | MCP | MCP 2.0 正式发布:AI 应用接入协议,开始进入「云原生时代」

目录 一、最大的变化:MCP 默认走向无状态 Before:有状态 HTTP MCP Server After:无状态 HTTP MCP Server 二、HTTP 变得更标准:网关终于看得懂 MCP Before:先初始化,再携带 Session ID After&#xf…

2026/7/30 21:49:52 阅读更多 →
196、车载Camera系统:HDR与LED闪烁抑制在ISO 26262安全框架下的实现

196、车载Camera系统:HDR与LED闪烁抑制在ISO 26262安全框架下的实现

196、车载Camera系统:HDR与LED闪烁抑制在ISO 26262安全框架下的实现 去年夏天,某Tier1客户送测的环视系统在夜间地库测试时翻车了——倒车影像里前方车辆的LED尾灯像频闪灯一样忽明忽暗,HDR融合后的画面出现诡异的“鬼影”。更麻烦的是,这个bug在ISO 26262的ASIL-B等级评审…

2026/7/30 21:49:52 阅读更多 →
Matlab实现多式联运路径优化:应对不确定需求与混合时间窗

Matlab实现多式联运路径优化:应对不确定需求与混合时间窗

1. 项目背景与核心挑战多式联运作为现代物流体系中的重要环节,其路径优化问题一直是运输管理领域的重点研究方向。在实际运输场景中,需求的不确定性(如货量波动、临时订单变更)与时间窗约束(如港口作业时间、铁路班列时…

2026/7/30 21:49:52 阅读更多 →
197、安防监控低照度优化:从sensor噪声到ISP降噪的端到端调优

197、安防监控低照度优化:从sensor噪声到ISP降噪的端到端调优

197、安防监控低照度优化:从sensor噪声到ISP降噪的端到端调优 去年有个项目让我印象深刻——某款IPC(网络摄像机)在0.01 lux照度下,画面全是彩色噪点,客户直接甩了竞品对比图过来。那台竞品用的是同款sensor,ISP方案不同,但低照度表现明显好一截。当时我盯着两路视频流看…

2026/7/30 21:49:52 阅读更多 →
终极指南:如何用AI骨骼识别技术实现智能姿势搜索

终极指南:如何用AI骨骼识别技术实现智能姿势搜索

终极指南:如何用AI骨骼识别技术实现智能姿势搜索 【免费下载链接】pose-search x6ud.github.io/pose-search 项目地址: https://gitcode.com/gh_mirrors/po/pose-search 你是否曾为寻找特定的人体姿势图片而烦恼?想象一下,你想找一张&…

2026/7/30 21:48:52 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻