在实际的开发过程当中,会遇到这样的需求:某些功能为了防止系统挂死,需要进行时间控制,超过一定的执行时间,就提示任务执行超时,不再继续执行该任务,从而保证系统健壮性和稳定性。其实仔细想想,我们可以把这样的需求,全部归结为一种“超时控制的业务模型”,建立起自己熟悉的业务模型,以后碰到类似的需求,可以借鉴此方案。若有机会设计或重构系统,在必要的模块中,也可以将该方案作为增强系统稳定性的一个备选方案。
方案一:使用守护线程
此方案需要的类有:
TimeoutThread:定义超时的线程,里面包含超时时间和是否执行完成状态定义。主要任务就是监听时间,超出时间后抛出运行时异常。
TimeoutException:定义的一个运行时异常,继承RuntimeException。如果觉得名字有重复的话,也可以换成别的名字。
TaskThread:定义任务执行的线程,守护线程,包含成员变量TimeoutThread,里面主要执行任务主体,任务执行完后,修改TimeoutThread的状态为执行完成。
MyUncauhtExceptionHandler:自定义的线程异常捕获类,在守护进程由于超时被迫销毁时,能够执行这个异常里的代码,一般用于任务执行主体超时后的状态改变,如将任务标记为超时状态。各位请注意:线程中抛出的异常,是不能够被直接捕获的。
MyHandlerThreadFactory(可选):实现ThreadFactory接口,线程的创建工厂,在这里主要是为线程池修改默