任務定時調度
通過Timer和Timetask,我們可以實現定時啟動某個線程。
java.util.Timer
在這種實現方式中,Timer類作用是類似鬧鍾的功能,也就是定時或者每隔一定時間觸發一次線程。其實,Timer類本身實現的就是一個線程,只是這個線程是用來實現調用其它線程的。
java.util.TimerTask
TimerTask類是一個抽象類,該類實現了Runnable接口,所以該類具備多線程的能力。
在這種實現方式中,通過繼承TimerTask使該類獲得多線程的能力,將需要多線程執行的代碼書寫在run方法內部,然后通過Timer類啟動線程的執行。
java.util.Timer的使用
public class TestTimer { public static void main(String[] args) { Timer t1 = new Timer();//定義計時器; MyTask task1 = new MyTask();//定義任務; t1.schedule(task1,3000); //3秒后執行; //t1.schedule(task1,5000,1000);//5秒以后每隔1秒執行一次! //GregorianCalendar calendar1 = new GregorianCalendar(2010,0,5,14,36,57); //t1.schedule(task1,calendar1.getTime()); //指定時間定時執行; } } class MyTask extends TimerTask {//自定義線程類繼承TimerTask類; public void run() { for(int i=0;i<10;i++){ System.out.println("任務1:"+i); } } }
執行結果如圖:
運行以上程序時,可以感覺到在輸出之前有明顯的延遲(大概就是3秒!)。還有幾個方法,自己試試吧!
在實際使用時,一個Timer可以啟動任意多個TimerTask實現的線程,但是多個線程之間會存在阻塞。所以如果多個線程之間需要完全獨立的話,最好還是一個Timer啟動一個TimerTask實現。
===========
@Scheduled注解
https://www.jianshu.com/p/1defb0f22ed1
Springboot整合異步定時任務
https://blog.csdn.net/qq_32447301/article/details/84668865
spring boot 自帶的定時任務,時間表達式中代表周幾的一些坑。。
https://blog.csdn.net/z1040141848/article/details/96973459
springboot 集成 quartz 動態實現定時任務
實際開發中,我們可以使用開源框架quanz,更加方便的實現任務定時調度。實際上,quanz底層原理就是我們這里介紹的內容。
https://blog.csdn.net/z291197968/article/details/82351471