博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java多线程(十四):Timer
阅读量:3756 次
发布时间:2019-05-22

本文共 3332 字,大约阅读时间需要 11 分钟。

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···

转载地址:http://hrasn.baihongyu.com/

你可能感兴趣的文章
哲学家进餐问题
查看>>
Python-Opencv学习总结(一):图像读取和获取图像特征
查看>>
实验十三:导出与导入
查看>>
第十五周.
查看>>
基于MVC模式的用户登录
查看>>
Java Swing搭建QQ登录界面
查看>>
Spring常用依赖及注解的使用
查看>>
解决Maven中资源过滤问题
查看>>
Springboot中解决Ajax请求跨域问题
查看>>
Keras软件安装
查看>>
cuda安装
查看>>
Anaconda3换源配置
查看>>
Unsafe.putOrderedXXX系列方法详解(数组赋值的第二种方式)
查看>>
javase个人垃圾复习笔记05Java StringBuffer 和 StringBuilder 类
查看>>
牛客编程题(七)
查看>>
三种设计模式
查看>>
牛客编程题(八)
查看>>
牛客编程题(九)
查看>>
过滤流
查看>>
3.输入整型数组和排序标识,对其元素按照升序或降序进行排序
查看>>