java 任務定時調度(定時器)


任務定時調度

通過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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM