java 实现超时监听_java多线程实现任务超时监听

本文介绍了在Java开发中实现任务超时监听的两种方案:一是使用守护线程,通过TimeoutThread、TimeoutException等类实现;二是利用Future的get方法设置超时时间。这两种方法都能确保系统健壮性和稳定性,其中使用Future的方法更推荐在企业应用开发中使用。
摘要由CSDN通过智能技术生成

在实际的开发过程当中,会遇到这样的需求:某些功能为了防止系统挂死,需要进行时间控制,超过一定的执行时间,就提示任务执行超时,不再继续执行该任务,从而保证系统健壮性和稳定性。其实仔细想想,我们可以把这样的需求,全部归结为一种“超时控制的业务模型”,建立起自己熟悉的业务模型,以后碰到类似的需求,可以借鉴此方案。若有机会设计或重构系统,在必要的模块中,也可以将该方案作为增强系统稳定性的一个备选方案。

方案一:使用守护线程

此方案需要的类有:

TimeoutThread:定义超时的线程,里面包含超时时间和是否执行完成状态定义。主要任务就是监听时间,超出时间后抛出运行时异常。

TimeoutException:定义的一个运行时异常,继承RuntimeException。如果觉得名字有重复的话,也可以换成别的名字。

TaskThread:定义任务执行的线程,守护线程,包含成员变量TimeoutThread,里面主要执行任务主体,任务执行完后,修改TimeoutThread的状态为执行完成。

MyUncauhtExceptionHandler:自定义的线程异常捕获类,在守护进程由于超时被迫销毁时,能够执行这个异常里的代码,一般用于任务执行主体超时后的状态改变,如将任务标记为超时状态。各位请注意:线程中抛出的异常,是不能够被直接捕获的。

MyHandlerThreadFactory(可选):实现ThreadFactory接口,线程的创建工厂,在这里主要是为线程池修改默

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值