本篇内容介绍了“JavaScheduledThreadPoolExecutor的坑如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这个坑就是如果ScheduledThreadPoolExecutor
中执行的任务出错抛出异常后,不仅不会打印异常堆栈信息,同时还会取消后面的调度, 直接看例子。运行结果:只执行了5次后,就不打印,不执行了,因为报错了任务报错,也没有打印一次堆栈,更导致调度任务取消,后果十分严重。解决方法也非常简单,只要通过try catch捕获异常即可。运行结果:看到不仅打印了异常堆栈,而且也会进行周期性的调度。更好的建议可以在自己的项目中封装一个包装类,要求所有的调度都提交通过我们统一的包装类, 如下代码:使用:我们还可以在包装类里面封装各种监控行为,如本例打印日志执行时间等。那大家有没有想过为什么任务出错会导致异常无法打印,甚至调度都取消了呢?让我们从源码出发,一探究竟。1.下面是调度任务的入口方法。这个方法主要做了两个事情:将执行任务和参数包装成ScheduledFutureTask对象调用免费云主机域名delayedExecute
方法延迟执行任务2.延迟或周期性任务的主要执行方法, 主要是将任务丢到队列中,后续由工作线程获取执行。3.现在任务已经在队列中了,我们看下任务执行的内容是什么,还记得前面的包装对象ScheduledFutureTask
类,它的实现类是ScheduledFutureTask
,继承了Runnable类。这里的关键就是看ScheduledFutureTask.super.runAndReset()
方法是否返回true,如果是true的话继续调度。4.runAndReset方法也很简单,关键就是看报异常如何处理。关键点ran变量,最终返回是不是下次继续调度执行如果抛出异常的话,可以看到不会修改ran为true。“JavaScheduledThreadPoolExecutor的坑如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!
这篇文章主要介绍“java怎么实现流”,在日常操作中,相信很多人在java怎么实现流问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现流”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!集合是Java中使用最多的AP…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。