1. 程式人生 > >任務調度之Timer與TimerTask配合

任務調度之Timer與TimerTask配合

所有 size ont -s timertask [] 守護線程 cancel 安全

什麽是任務調度?

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

任務調度有多種方式

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類的線程安全的

任務調度之Timer與TimerTask配合