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

超时取消子线程任务

文章目录

  • 前言
  • 一、编码思路
  • 二、使用步骤
    • 直接上代码
  • 总结


前言

问题背景:
主线程需要执行一些任务,不能影响主任务执行,这些任务有超时时间,当超过处理时间后,应该不予处理;如果未超时,应该获取到这些任务的执行结果;


一、编码思路

  1. 由于主线程正常执行不能影响,任务会处理很久,利用子线程处理
  2. 子线程运行后,应该有线程处理超时逻辑,超时后取消子线程
  3. 应有判断子线程在超时时间内,是否执行完成的逻辑,执行完成获取结果

二、使用步骤

直接上代码

代码如下(示例):

public class ComputeIfAbsentTest {public static void main(String[] args) throws ExecutionException, InterruptedException {// 创建一个单线程的线程池ExecutorService executor = Executors.newSingleThreadExecutor();// 提交任务并获取Future对象Future<?> future = executor.submit(() -> {// 子线程执行的任务try {// 模拟任务执行时间Thread.sleep(5000);  // 假设任务需要5秒钟完成System.out.println(Thread.currentThread().getName());return "处理完成";} catch (InterruptedException e) {// 如果任务被取消,中断异常会被抛出System.out.println("Task interrupted.");return "";}});// 设置一个超时时间,如果任务在规定时间内没有完成,则会被取消ScheduledExecutorService schedule = Executors.newSingleThreadScheduledExecutor();schedule.schedule(() -> {try {if (future.isDone()) {Object result = future.get();  // 获取结果System.out.println("Result: " + result);}else {System.out.println(Thread.currentThread().getName());// 取消任务future.cancel(true);System.out.println("Task timeout, cancelled.");}} catch (Exception e) {e.printStackTrace();}}, 3000, TimeUnit.MILLISECONDS);// 设置超时时间为3秒// 主线程继续执行其他操作System.out.println("Main thread continues to execute.");// 关闭线程池executor.shutdown();schedule.shutdown();}
}

总结

利用Executors框架创建子线程执行任务;
利用Executors框架创建延时子线程监事执行任务的线程,通过超时时间判断 执行任务 子线程是否处理完成,处理完成获取结果,未处理完成,取消执行任务的子线程;

http://www.lryc.cn/news/155015.html

相关文章:

  • 模块化---common.js
  • VSCode下载、安装及配置、调试的一些过程理解
  • KC705开发板——MGT IBERT测试记录
  • 前端代码优化散记
  • HTML <map> 标签的使用
  • stable diffusion实践操作-大模型介绍
  • W5500-EVB-PICO进行MQTT连接订阅发布教程(十二)
  • 90、00后严选出的数据可视化工具:奥威BI工具
  • 删除maven中出现.lastUpdate结尾的文件
  • Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘
  • Dockerfile中编译、打包、部署spring boot项目
  • 微型计算机原理知识点总结(一)
  • 【postgresql 基础入门】psql客户端的使用方法
  • QTcpSocket发送数据方法
  • select 语句执行顺序
  • PMD 检查java代码:避免将内部数组直接返回给调用者(MethodReturnsInternalArray)
  • ActiveMQ配置初探
  • 【官方中文文档】Mybatis-Spring #示例代码
  • python二级例题
  • 【java】【项目实战】[外卖九]项目优化(缓存)
  • Scala集合常用函数与集合计算简单函数,高级计算函数Map和Reduce等
  • You must install at least one postgresql-client-<version> package
  • 爬虫源码---爬取自己想要看的小说
  • 【AGC】云数据库API9开发问题汇总
  • ASP.NET Core IOC容器
  • 入门力扣自学笔记277 C++ (题目编号:42)(动态规划)
  • SwiftUI实现iPad多任务分屏
  • maven依赖,继承
  • 仿`gRPC`功能实现像调用本地方法一样调用其他服务器方法
  • 分布式环境下的数据同步