前言:
眼前兄弟们对“java定时任务不执行”大概比较珍视,姐妹们都需要知道一些“java定时任务不执行”的相关知识。那么小编也在网络上网罗了一些有关“java定时任务不执行””的相关资讯,希望朋友们能喜欢,看官们快快来学习一下吧!JAVA定时任务主要有两种,是Timer和ScheduledThreadPoolExecutor
Timer是基于绝对时间的,对系统时间比较敏感, 而ScheduledThreadPoolExecutor 则是基于相对时间;Timer是内部是单一线程,而ScheduledThreadPoolExecutor内部是个线程池,所以可以支持多个任务并发执行。
Timer常用APIScheduledThreadPoolExecutor常用API
下面主要讲一下如何使用这两种。
Timer举例
shedule方法执行结果如下,后续的线程会一直延迟。
Mon Oct 08 21:12:30 CST 2018 timer begin.... Mon Oct 08 21:12:35 CST 2018 Time's up!!!! Mon Oct 08 21:12:39 CST 2018 Time's up!!!!
若使用scheduleAtFixedRate,若执行延迟少于1s,则会多执行几次,补足由于延迟而未达到的执行次数。
ScheduledThreadPoolExecutor举例
执行结果如下:
Mon Oct 08 21:22:27 CST 2018 timerOne,the time:1064Mon Oct 08 21:22:31 CST 2018 timerOne,the time:5066Mon Oct 08 21:22:35 CST 2018 timerOne,the time:9066
同理scheduleWithFixedDelay执行原理和Timer的shedule方法一致。
Timer和 ScheduledThreadPoolExecutor选择
Timer的缺陷:
1. 单线程 2.若某一个任务有异常,则所有后续任务都不会再执行。
在生产环境建议使用ScheduledThreadPoolExecutor。当然使用spring框架的定时任务更加简单,原生的Java定时能帮助我们深化分析底层问题的能力。
若有什么建议或者不对的地方欢迎留言讨论。
标签: #java定时任务不执行