該方法在指定日期執行任務,若是是過去的時間,這個任務會當即被執行。
執行時間早於當前時間
示例代碼,當前時間是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
該方法在指定的時間執行任務,間隔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 ···