任務調度之Timer與TimerTask配合


什么是任務調度?

在實際業務中,我們經常需要定時、定期、或者多次完成某些任務,對這些任務進行管理,就是任務調度。任務調度與多線程密切相關。

 

任務調度有多種方式

Timer與TimerTask配合

Timer 定時器,能在主線程外另起線程完成任務

TimerTask 實現Runnable接口的抽象類,相當於一個任務

 

來一個簡單的例子:

import java.util.Timer;
import java.util.TimerTask;

public class TestTimer {
    
    public static void main(String args[]){
new Reminder(3);
        System.out.println("調度完成。");
    }
    
    public static class Reminder{
        Timer timer;
        
        public Reminder(int sec){
            timer = new Timer();
       //開始調度任務 timer.schedule(
new TimerTask(){ public void run(){ System.out.println("時間到!");
            //重要:終止內部線程! timer.cancel(); } }, sec
*1000); } } }

會輸出:

調度完成。

時間到!

 

原理:Timer的構造函數里會起一個單獨的線程(new Thread())來執行計划任務,並在任務完成后結束線程。

 

Timer如何終止內部線程?

1、調用timer的cancle方法(最常用,如上例)

2、把timer線程設置成daemon線程,(new Timer(true)創建daemon線程),在jvm里,如果所有用戶線程結束,那么守護線程也會被終止,不過這種方法一般不用。

3、當所有任務執行結束后,刪除對應timer對象的引用,線程也會被終止。

4、調用System.exit方法終止程序

 

注意點:

1、每一個Timer僅對應唯一一個線程

2、Timer不保證任務執行的十分精確。

3、Timer類的線程安全的

 


免責聲明!

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



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