JAVA知識之多線程(五):計時器功能

計時器功能需要用到兩個類Timer和TimerTask。
- 需要定時執行的線程類,需要繼承TimerTask類。
- 每個Timer對象對應的是一個單獨的線程,用來執行Timer對象綁定的定時器任務,當定時器任務全都完成時,對應的線程會終止,並被垃圾回收。執行過程也許會非常漫長,這段時間內,定時器會阻止主線程結束,如果想提前結束定時器任務,應該調用定時器的cancel()方法。
- 線程安全,不需要對同一個timer對象的不同線程做同步的設置。

使用方法如下:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTest {

    public static void main(String[] args) {
        long waitTime = 2000l;//定時器執行前等待時間
        long sleepTime = 5000l;//定時器執行時間間隔
        //初始化timer對象
        Timer timer = new Timer();
        //輸出現在時間
        Date now = new Date(); 
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        System.out.println(dateFormat.format(now));
        //設置定時器啓動時間,時間間隔
        timer.schedule(new Task(), waitTime, sleepTime);
    }
}
//定時器任務需要繼承TimerTask類
class Task extends TimerTask{
    @Override
    public void run() {
    //每隔sleepTime,輸出一次當前時間
        Date now = new Date(); 
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        System.out.println(dateFormat.format(now));
    }
}

輸出結果如下:
第27秒開始執行定時器,定時器延遲兩秒執行,然後每隔5秒輸出一次當前時間。

創建定時任務主要有4個方法
1. public void schedule(TimerTask task, long delay)
在delay延遲之後,開始執行task任務
2. public void schedule(TimerTask task, Date time)
在time時間執行task任務
3. public void schedule(TimerTask task, long delay, long period)
在delay時間延遲後,開始執行task任務,並以period時間間隔重複執行
4. public void schedule(TimerTask task, Date firstTime, long period)
在firstTime開始執行task任務,並以period時間間隔重複執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章