定時任務是在指定時間執行程序,或週期性執行計劃任務。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/