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的更多相关文章

  1. Java多线程(四)java中的Sleep方法

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  2. “全栈2019”Java多线程第四章:设置和获取线程名称

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  3. “全栈2019”Java第九十四章:局部内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. “全栈2019”Java第十四章:二进制、八进制、十六进制

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. java多线程系列(四)---Lock的使用

    Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...

  7. java多线程系列(四)---ReentrantLock的使用

    Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...

  8. Java多线程核心技术(四)Lock的使用

    本文主要介绍使用Java5中Lock对象也能实现同步的效果,而且在使用上更加方便. 本文着重掌握如下2个知识点: ReentrantLock 类的使用. ReentrantReadWriteLock ...

  9. 菜鸟学Java(十四)——Java反射机制(一)

    说到反射,相信有过编程经验的人都不会陌生.反射机制让Java变得更加的灵活.反射机制在Java的众多特性中是非常重要的一个.下面就让我们一点一点了解它是怎么一回事. 什么是反射 在运行状态中,对于任意 ...

  10. java 多线程 23 : Timer

    前言 定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面,可能一个项目要定时采集话单.定时更新某些缓存.定时清理一批不活跃用户等等.定时计划任务功能在Java中主要使用的就是Tim ...

随机推荐

  1. (二十三)c#Winform自定义控件-等待窗体

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  2. VMware安装Centos7虚拟机

    首先安装虚拟机很简单,所以呢,具体的安装过程就引用别人的博客,这篇文字很详细,引用之后会在后面加上一些遇到的问题: 原文:https://blog.csdn.net/babyxue/article/d ...

  3. .net测试篇之测试神器Autofixture Generator使用与自定义builder

    有了上一节自定义配置,很多问题都能解决了,但是如果仅仅是为了解决一个简单问题那么创建一个类显得有点繁重.其实AutoFixture在创建Fixture对象时有很多方便的Fluent配置,我们这里介绍一 ...

  4. 天眼查sign 算法破解

    天眼查sign 算法破解 最近真的在sign算法破解上一去不复返 前几天看过了企查查的sign破解 今天再看看天眼查的sign算法破解,说的好(zhuang)点(bi)就是破解,不好的就是这是很简单的 ...

  5. API 资源隔离系统设计与实现

    (马蜂窝技术原创内容,公众号 ID:mfwtech) Part 1 背景 大交通业务需要对接机票.火车票.租车.接送机等业务的外部供应链,供应商的数据接口大部分通过 HTTP.HTTPS 等协议进行通 ...

  6. 如何替换ROS中默认的Planner

    官方文档参阅:http://wiki.ros.org/pluginlib 有时候,可能会需要将替换ROS默认的planner替换成别的planner或我们自己的planner.这就涉及到了新plann ...

  7. ssh三大框架的认识

    一.SSH三大框架的概述 ssh为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架.  集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层 ...

  8. Java多线程(十二):中断机制

    这里详细分析interrupt(),interrupted(),isInterrupted()三个方法 interrupt() 中断这个线程,设置中断标识位 public void interrupt ...

  9. 简单的 Python 人脸识别实例

    案例一 导入图片 思路: 1.导入库 2.加载图片 3.创建窗口 4.显示图片 5.暂停窗口 6.关闭窗口 # 1.导入库 import cv2 # 2.加载图片 img = cv2.imread(' ...

  10. 北京2018网络赛 hihocoder#1828 : Saving Tang Monk II (BFS + DP +多开一维)

    hihocoder 1828 :https://hihocoder.com/problemset/problem/1828 学习参考:https://www.cnblogs.com/tobyw/p/9 ...