专业的JAVA编程教程与资源

网站首页 > java教程 正文

深入简出实战Java定时任务(java定时任务怎么做)

temp10 2024-09-21 03:59:46 java教程 8 ℃ 0 评论

JAVA定时任务主要有两种,是Timer和ScheduledThreadPoolExecutor

Timer是基于绝对时间的,对系统时间比较敏感, 而ScheduledThreadPoolExecutor 则是基于相对时间;Timer是内部是单一线程,而ScheduledThreadPoolExecutor内部是个线程池,所以可以支持多个任务并发执行。

Timer常用API

ScheduledThreadPoolExecutor常用API

下面主要讲一下如何使用这两种。

深入简出实战Java定时任务(java定时任务怎么做)

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:1064
Mon Oct 08 21:22:31 CST 2018 timerOne,the time:5066
Mon Oct 08 21:22:35 CST 2018 timerOne,the time:9066

同理scheduleWithFixedDelay执行原理和Timer的shedule方法一致。

Timer和 ScheduledThreadPoolExecutor选择

Timer的缺陷:

1. 单线程 2.若某一个任务有异常,则所有后续任务都不会再执行。

在生产环境建议使用ScheduledThreadPoolExecutor。当然使用spring框架的定时任务更加简单,原生的Java定时能帮助我们深化分析底层问题的能力。

若有什么建议或者不对的地方欢迎留言讨论。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表