Java多線程(十四):Timer

Timer

schedule(TimerTask task, Date time)

該方法在指定日期執行任務,若是是過去的時間,這個任務會當即被執行。
執行時間早於當前時間
示例代碼,當前時間是2019年9月19日,代碼中寫的是前一天的時間。java

public class MyTask1 extends TimerTask {
    private static Timer timer = new Timer();

    public void run()
    {
        System.out.println("運行了!時間爲:" + new Date());
    }

    public static void main(String[] args) throws Exception
    {
        MyTask1 task = new MyTask1();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = "2019-9-18 21:22:00";
        Date dateRef = sdf.parse(dateString);
        System.out.println("字符串時間:" + dateRef.toLocaleString() + " 當前時間:" + new Date().toLocaleString());
        timer.schedule(task, dateRef);
    }
}

運行結果以下code

字符串時間:2019-9-18 21:22:00 當前時間:2019-9-19 20:18:26
運行了!時間爲:Thu Sep 19 20:18:26 CEST 2019

能夠看到,過去的時間當即執行。
執行時間晚於當前時間
修改代碼的dateString改成將來的時間,如"2019-9-19 20:22:00"
運行結果以下orm

字符串時間:2019-9-19 20:22:00 當前時間:2019-9-19 20:21:22
運行了!時間爲:Thu Sep 19 20:22:00 CEST 2019

能夠看到,將來的時間要等到目標時間纔會執行。
多個Timer同時執行
示例代碼以下字符串

public class MyTask2 extends TimerTask {
    private static Timer timer = new Timer();

    public void run()
    {
        System.out.println("運行了!時間爲:" + new Date());
    }

    public static void main(String[] args) throws Exception
    {
        MyTask2 task1 = new MyTask2();
        MyTask2 task2 = new MyTask2();
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString1 = "2019-9-19 21:12:00";
        String dateString2 = "2019-9-19 21:12:00";
        Date dateRef1 = sdf1.parse(dateString1);
        Date dateRef2 = sdf2.parse(dateString2);
        System.out.println("字符串時間:" + dateRef1.toLocaleString() + " 當前時間:" + new Date().toLocaleString());
        System.out.println("字符串時間:" + dateRef2.toLocaleString() + " 當前時間:" + new Date().toLocaleString());
        timer.schedule(task1, dateRef1);
        timer.schedule(task2, dateRef2);
    }
}

運行結果以下io

字符串時間:2019-9-19 21:12:00 當前時間:2019-9-19 21:11:57
字符串時間:2019-9-19 21:12:00 當前時間:2019-9-19 21:11:57
運行了!時間爲:Thu Sep 19 21:12:00 CEST 2019
運行了!時間爲:Thu Sep 19 21:12:00 CEST 2019

說明能夠多任務執行。執行時間和當前時間的關係規則同上。class

schedule(TimerTask task, Date firstTime, long period)

該方法在指定的時間執行任務,間隔period時間再次執行,無限循環。
執行時間早於當前時間
示例代碼date

public class MyTask3 extends TimerTask {
    public void run()
    {
        System.out.println("運行了!時間爲:" + new Date());
    }

    public static void main(String[] args) throws Exception
    {
        MyTask3 task = new MyTask3();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = "2019-09-19 22:01:00";
        Timer timer = new Timer();
        Date dateRef = sdf.parse(dateString);
        System.out.println("字符串時間:" + dateRef.toLocaleString() + " 當前時間:" + new Date().toLocaleString());
        timer.schedule(task, dateRef, 4000);
    }
}

運行結果以下循環

字符串時間:2019-9-19 22:01:00 當前時間:2019-9-19 22:09:13
運行了!時間爲:Thu Sep 19 22:09:13 CEST 2019
運行了!時間爲:Thu Sep 19 22:09:17 CEST 2019
運行了!時間爲:Thu Sep 19 22:09:21 CEST 2019
運行了!時間爲:Thu Sep 19 22:09:25 CEST 2019
···

能夠看到,當即執行。
執行時間晚於當前時間
運行結果以下方法

字符串時間:2019-9-19 22:12:00 當前時間:2019-9-19 22:11:24
運行了!時間爲:Thu Sep 19 22:12:00 CEST 2019
運行了!時間爲:Thu Sep 19 22:12:04 CEST 2019
運行了!時間爲:Thu Sep 19 22:12:08 CEST 2019
運行了!時間爲:Thu Sep 19 22:12:12 CEST 2019
運行了!時間爲:Thu Sep 19 22:12:16 CEST 2019
···
相關文章
相關標籤/搜索