Java多线程(十四):Timer
2019-09-20 04:30
1866 查看
Timer
schedule(TimerTask task, Date time)
该方法在指定日期执行任务,如果是过去的时间,这个任务会立即被执行。
执行时间早于当前时间
示例代码,当前时间是2019年9月19日,代码中写的是前一天的时间。
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); } }
运行结果如下
字符串时间: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"
运行结果如下
字符串时间: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); } }
运行结果如下
字符串时间: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
说明可以多任务执行。执行时间和当前时间的关系规则同上。
schedule(TimerTask task, Date firstTime, long period)
该方法在指定的时间执行任务,间隔period时间再次执行,无限循环。
执行时间早于当前时间
示例代码
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 ···
相关文章推荐
- Java 中 Timer 和 TimerTask实现多线程
- Java多线程编程核心技术(第五章定时器Timer笔记)
- java 软件构造 多线程与timer
- java多线程与高并发库应用(二)线程创建和定时任务Timer
- 【Java多线程】-Timer,TimerTask,ScheduledExecutorService
- Java多线程(五):Timer和TimerTask
- java多线程之定时器Timer的使用详解
- java多线程:volatile及Timer用法示例
- Java多线程与并发应用-(1)-定时任务1-Timer的使用
- java多线程核心技术 第五章 定时器Timer
- 02_张孝祥_Java多线程_传统定时器Timer
- Java系列(十四)__多线程
- Java多线程-定时器Timer
- java多线程:2、Timer实现
- Java多线程复习与巩固(二)--线程相关工具类Timer和ThreadLocal的使用
- (十三)java多线程之Timer
- JAVA基础初探(十四)多线程(线程与进程概述、线程的实现、状态、常用方法、优先级、生命周期)
- (十四)java多线程之死锁
- java线程安全之多线程的设计模式(十四)
- (11)Java多线程之Timer