Java基础: 定时任务的那些陷阱

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gaolh89/article/details/82141614

本文探讨定时任务,定时任务的应用场景是非常多的,比如:

  • 闹钟程序或任务提醒,指定时间叫床或在指定日期提醒还信用卡。
  • 监控系统,每隔一段时间采集下系统数据,对异常事件报警。
  • 统计系统, 一般凌晨一定时间统计昨日的各种数据指标。

在 Java 中,主要有两种方式实现定时任务:

  • 使用 java.util 包中的 Timer 和 TimerTask。
  • 使用 Java 并发包中的 ScheduledExecutorService。

它们的基本用法都是比较简单的,但如果对它们没有足够的了解,则很容易陷入其中 的一些陷阱。 下面,我们就来介绍它们的用法、原理以及那些陷阱。

#一.Timer 和 TimerTask

我们先介绍它们的基本用法和示例,然后介绍它们的实现原理和一些注意事项。

#二.ScheduledExecutorService

由于 Timer/TimerTask 的一些问题, Java 并发包引入了 ScheduledExecutorService,下面我们介绍它的基本用法、基本示例和基本原理。

1.基本用法 ScheduledExecutorService 是一个接口,其定义为 :

这里写代码片

三.小结

本文介绍了Java 中定时任务的两种实现方式: Timer 和 ScheduledExecutorService, 需要特别注意 Timer 的一些陷阱,实践中建议使用 ScheduledExecutorService。
它们的共同局限是不太胜任复杂的定时任务调度。 比如,每周一和周三晚上 18:00 到 22:00,每半小时执行一次。 对于类似这种需求,可以利用我们之前在日期和时间处理方法,或者利用更为强大的第三方类库,比如 Quartz ( http://www.quartz-scheduler. org/) 。

猜你喜欢

转载自blog.csdn.net/gaolh89/article/details/82141614