龙空技术网

深入简出实战Java定时任务

闲浮半日 569

前言:

眼前兄弟们对“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定时任务不执行