参考redis实现分布式锁的方式,使用看门狗的方式来执行具体任务

看门狗线程一般不是工作线程,而是监控线程,

但是我们需要执行的任务应该在子线程执行而主线程应该等待子线程执行结果,

因此,使用看门狗线程执行具体任务,主线程循环轮询,是否子线程返回结果;

具体实现如下:

package com.test;import java.util.Arrays;
import java.util.function.Function;/*** @author yangguang* @date 2023年05月12日 13:52*/
public class Test {private int timeout;private Function<String[],Integer> taskFunction;private Thread taskThread;private volatile Thread currentThread;private String[] param;private volatile Integer result;public Test(int timeout,String[] param,Function<String[],Integer> taskFunction) {this.timeout = timeout;this.taskFunction = taskFunction;this.param = param;this.currentThread = Thread.currentThread();}public Integer startTask() {taskThread = new Thread(()->{result = taskFunction.apply(param);currentThread.interrupt();});taskThread.start();while (true) {try {Thread.sleep(timeout);System.out.println("第三方接口调用超时");taskThread.stop();return -1;} catch (InterruptedException e) {System.out.println("第三方接口调用正常返回");return result;}}}private static Function<String[],Integer> apiService(){return param->{try {//调用第三方接口System.out.println("接口参数为"+ Arrays.toString(param));Thread.sleep(2000);} catch (Exception e) {e.printStackTrace();}return 1;};}public static void main(String[] args) {Test test = new Test(3000,new String[]{"参数1","参数2"},apiService());Integer r = test.startTask();System.out.println("第三方接口返回结果为"+r);test = new Test(1000,new String[]{"参数1","参数2"},apiService());r = test.startTask();System.out.println("第三方接口返回结果为"+r);}}

监控任务是否超时,超时则结束任务相关推荐

  1. mysql 连接 110 超时_Nginx和mysql上行超时超时(110:连接超时)

    我的堆栈是带gevent循环.flask.mysql和python mysql.connector的uWSGI,我可以进行异步mysql查询.Lateley我在运行查询时在nginx日志中发现了以下错 ...

  2. linux shell curl 超时与重试

    目录 curl 关于时间控制和重试的参数 连接超时参数 connect-timeout 请求超时时间 --max-time 请求重试 retry 重试超时时间 retry-max-time 重试延迟 ...

  3. TCP/IP详解--学习笔记(12)-TCP的超时与重传

    超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止. 1.超时 超 ...

  4. TCP/IP详解学习笔记(12)-TCP的超时与重传

    超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止. 1.超时 超 ...

  5. CSocket类的Receive超时的问题解决方案

    前几日碰到一问题,当CSocket的Receive阻塞时,如何进行超时处理.由于程序是在多线程中使用Socket通信,开始时是在主线程中用定时监测Receive函数,当超时后,结束通信.但问题是CSo ...

  6. Golang中WaitGroup、Context、goroutine定时器及超时学习笔记

    原文连接:http://targetliu.com/2017/5/2... 好久没有发过文章了 - -||,今天发一篇 golang 中 goroutine 相关的学习笔记吧,以示例为主. WaitG ...

  7. poj java 输入超时_Java:如何实现代码超时功能?

    我们写一个有超时功能的 Callable: import java.util.concurrent.*; public class TimeoutCallable implements Callabl ...

  8. 【韧性设计】韧性设计模式:重试、回退、超时、断路器

    什么是韧性? 软件本身并不是目的:它支持您的业务流程并使客户满意.如果软件没有在生产中运行,它就无法产生价值.然而,生产性软件也必须是正确的.可靠的和可用的. 当谈到软件设计中的弹性时,主要目标是构建 ...

  9. Python笔记_84_我的订单_使用celery完成订单超时_视频播放_使用保利威视频加密

    文章目录 我的订单 后端提供查询当前登录用户的订单列表信息 前端请求获取当前登录用户的订单信息 订单状态显示分析 使用Celery的定时任务来完成订单超时功能 视频播放 使用保利威云视频服务来对视频进 ...

  10. 生产事故总结篇(2) 接口响应超时优化方案

    1 查询类接口 一 mysql数据库查询超时问题 1 查询字段是否存在索引,索引是否失效 索引是个老生常谈的问题了, 需要特别注意下面几个点 唯一的值必须要建立唯一索引 比如订单号,售后单号,上门取件 ...

最新文章

  1. easypoi教程_EasyPoi教程
  2. Jrebel 热部署插件的使用和破解
  3. PCB设计要点-DDR3布局布线技巧及注意事项
  4. 处理UTF-8编码的不连续的字节流
  5. LeetCode 1257. 最小公共区域(最小公共祖先)
  6. KAFKA SpringBoot2 Nacos 消息异步发送和消费消息(进阶篇)
  7. uboot引导linux内核,u-boot启动内核的几种方式
  8. node.js——麻将算法(五)胡牌算法的一些优化处理方案(有赖子版)
  9. linux安装oracle tar,在linux as4上用tar方式安装oracle 10g步骤教程-Oracle
  10. paip.广告过滤系统 php 实现
  11. POJ - 1179
  12. revit 对计算机最低配置,Revit2016官方推荐电脑配置要求
  13. 小白篇:阿里云 对象存储 OSS
  14. 五星填数(全排列问题)
  15. Casbin明日之星预选生计划-Talent for Casbin 2021(长期招聘)
  16. 树莓派摄像头在桌面不显示 | 树莓派VNC摄像头实时显示
  17. JAVA pinyin4j 中文多音字转拼音转字母大写
  18. Lecture2:损失函数及优化
  19. ant design pro v2 - 权限控制
  20. 刷百度下拉那个词与百度快排点击原理是什么?做快排网站降权怎么办?

热门文章

  1. 4A广告公司和普通广告公司的区别,中国的广告市场是什么样子的?
  2. 要计算机专业才拥有的桌面,手把手教您win10黑屏一会才进桌面,win10开机黑屏很久才有画面解决办法...
  3. java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)
  4. uni-app如何取消页面的默认返回按钮
  5. elasticsearch ES搜索权重设置(boost参数)
  6. SVN 忽略指定类型文件或指定名称文件夹
  7. npm安装的坑浏览器代理
  8. Python编程从入门到实践 课后题 9-9电瓶升级
  9. 自动机器学习框架之一_Auto-Sklearn
  10. 苹果电脑关于网络参数的查询