执行定时任务——Timer、ScheduledThreadPoolExecutor和Qurtz

1. Timer

Timer只是充当了一个执行者的角色,真正的任务逻辑是通过一个叫做TimerTask的抽象类完成的,TimerTask也是java.util包下面的类,
它是一个实现了Runnable接口的抽象类,包含一个抽象方法run( )方法,需要我们自己去提供具体的业务实现。

Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,
因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。

JDK 5.0以后推荐使用ScheduledThreadPoolExecutor。

2.ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor属于Executor Framework,
它除了能处理异常外,还可以以多线程方式执行定时任务。
Timer类是通过单线程来执行所有的TimerTask任务的,如果一个任务的执行过程非常耗时,将会导致其他任务的时效性出现问题。
而 ScheduledThreadPoolExecutor是基于线程池的多线程执行任务,不会存在这样的问题。

3.使用Qurtz

Qurtz的使用非常简单,作为解决方案支持更多的触发机制。

具体的应用可以查看官方文档:http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/

参考

  • 1)使用Timer和ScheduledThreadPoolExecutor执行定时任务

你可能感兴趣的:(执行定时任务——Timer、ScheduledThreadPoolExecutor和Qurtz)