定时任务是在指定时间执行程序,或周期性执行计划任务。java
Java中实现定时任务的方法有不少,主要JDK自带的一些方法以及开源程序如Qurtz。多线程
Timer只是充当了一个执行者的角色,真正的任务逻辑是经过一个叫作TimerTask的抽象类完成的,TimerTask也是java.util包下面的类,
它是一个实现了Runnable接口的抽象类,包含一个抽象方法run( )方法,须要咱们本身去提供具体的业务实现。ide
Timer 的优势在于简单易用,但因为全部任务都是由同一个线程来调度,
所以全部任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到以后的任务。学习
示例代码:spa
1.net 2线程 3code 4orm 5继承 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
JDK 5.0之后推荐使用ScheduledThreadPoolExecutor。关于Timer简单了解便可。
ScheduledThreadPoolExecutor属于Executor Framework,
它除了能处理异常外,还能够以多线程方式执行定时任务。
Timer类是经过单线程来执行全部的TimerTask任务的,若是一个任务的执行过程很是耗时,将会致使其余任务的时效性出现问题。
而 ScheduledThreadPoolExecutor是基于线程池的多线程执行任务,不会存在这样的问题。
经过一个实例学习:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Qurtz的使用很是简单,做为解决方案支持更多的触发机制。
具体的应用能够查看官方文档:http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/