Java線程之Timer

很多時候,我們需要週期性的執行某個任務,在JDK1.5之前,有一個Timer類。其官方文檔中這樣描述一種工具,線程用其安排以後在後臺線程中執行的任務。可安排任務執行一次,或者定期重複執行其執行任務的時候,需要調用schedule方法。schedule重構了四個方法,如下:

void schedule(TimerTask task, Date time) // 安排在指定的時間執行指定的任務
void schedule(TimerTask task, Date firstTime, long period) //安排指定的任務在指定的時間開始進行重複的固定延遲執行
void schedule(TimerTask task, long delay) //安排在指定延遲後執行指定的任務
void schedule(TimerTask task, long delay, long period) //安排指定的任務從指定的延遲後開始進行重複的固定延遲執行

以Timer爲例,實現下面幾個小例子:
一:5秒後執行任務,之後每隔3秒執行一次。

public class TimerTest01 {
    public static void main(String[] args) {
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("Task_finished");
            }
        },5000,3000);

        while (true) {
            System.out.println(new Date().getSeconds());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

二:5秒之後執行TimerTak1,之後2秒執行TimerTask2,然後4秒後執行TimerTask1,再2秒後執行TimerTask2,4秒後執行TimerTask1,依次循環。

public class TimerTest02 {
    static class TimerTask1 extends TimerTask {
        @Override
        public void run() {
            System.out.println("TimerTask1_booming");
            new Timer().schedule(new TimerTask2(), 2000);
        }
    }

    static class TimerTask2 extends TimerTask {
        @Override
        public void run() {
            System.out.println("TimerTask2_booming");
            new Timer().schedule(new TimerTask1(), 4000);
        }
    }

    public static void main(String[] args) {
        new Timer().schedule(new TimerTask1(), 5000);
        while (true) {
            System.out.println(new Date().getSeconds());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

相關文章:Java線程池

發佈了76 篇原創文章 · 獲贊 48 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章