Timer类的全限定名

  java.util.Timer

java.util.Timer类的构造函数

public Timer();

public Timer(boolean isDaemon);

public Timer(String name);

public Timer(String name, boolean isDaemon);

java.util.Timer类提供的创建定时任务的方法

/**
* 延迟delay毫秒后执行任务task。
*
* @param task 任务
* @param delay 延迟时间
*/
public void schedule(TimerTask task, long delay); /**
* 在指定时间time执行任务task,如果时间已过,就立即执行。
*
* @param task 任务
* @param time 计划执行任务的时间
*/
public void schedule(TimerTask task, Date time); /**
* 延迟delay毫秒后执行第一次任务,之后每过period毫秒执行一次。
*
* 假设:
* 执行一次任务需要消耗的时间为 exeTime
* 执行此次任务的开始时间是 nowTime
* 执行下一次任务的预期时间是 expectTime
* 执行下一次任务的实际时间是 actuallyTime
* 如果 exeTime >= period ,那么,expectTime == nowTime + exeTime; actuallyTime >= expectTime;
* 如果 exeTime < period , 那么,expectTime == nowTime + period; actuallyTime >= expectTime;
*
* @param task 任务
* @param delay 执行首次任务的延迟时间
* @param period 后续周期性执行任务的时间间隔
*/
public void schedule(TimerTask task, long delay, long period); /**
* 在指定的时间firstTime执行第一次任务,之后每过period毫秒执行一次。
*
* 如果首次执行任务的时间firstTime已过,则立即执行一次首次任务。
*
* 假设:
* 执行一次任务需要消耗的时间为 exeTime
* 执行此次任务的开始时间是 nowTime
* 执行下一次任务的预期时间是 expectTime
* 执行下一次任务的实际时间是 actuallyTime
* 如果 exeTime >= period ,那么,expectTime == nowTime + exeTime; actuallyTime >= nowTime + exeTime;
* 如果 exeTime < period , 那么,expectTime == nowTime + period; actuallyTime >= nowTime + period;
*
* @param task 任务
* @param firstTime 计划执行首次任务的时间
* @param period 后续周期性执行任务的时间间隔
*/
public void schedule(TimerTask task, Date firstTime, long period); /**
* 延迟delay毫秒后执行第一次任务,之后每过period毫秒执行一次。
*
* 假设:
* 执行一次任务需要消耗的时间为 exeTime
* 执行此次任务的开始时间是 nowTime
* 执行下一次任务的预期时间是 expectTime
* 执行下一次任务的实际时间是 actuallyTime
* 如果 exeTime >= period ,那么,expectTime == nowTime + period; actuallyTime >= nowTime + exeTime;
* 如果 exeTime < period , 那么,expectTime == nowTime + period; actuallyTime >= nowTime + period;
*
* @param task 任务
* @param delay 执行首次任务的延迟时间
* @param period 后续周期性执行任务的时间间隔
*/
public void scheduleAtFixedRate(TimerTask task, long delay, long period); /**
* 在指定的时间firstTime执行第一次任务,之后每过period毫秒执行一次。
*
* 如果首次执行任务的时间已过,则立即执行之前应当执行的所有任务(1+N)。
*
* 假设:
* 执行一次任务需要消耗的时间为 exeTime
* 执行此次任务的开始时间是 nowTime
* 执行下一次任务的预期时间是 expectTime
* 执行下一次任务的实际时间是 actuallyTime
* 如果 exeTime >= period ,那么,expectTime == nowTime + period; actuallyTime >= nowTime + exeTime;
* 如果 exeTime < period , 那么,expectTime == nowTime + period; actuallyTime >= nowTime + period;
*
* @param task 任务
* @param firstTime 计划执行首次任务的时间
* @param period 后续周期性执行任务的时间间隔
*/
public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period);

创建定时任务的示例

示例一:延迟执行任务

package com.java.scheduled.task.timer;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class ScheduledTaskDemo01 { public static void main(String[] args) { Timer timer = new Timer("timer01");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long c1 = System.currentTimeMillis();
timer.schedule(new TimerTask() {
@Override
public void run() {
Date nowDate = new Date();
System.out.println("--------------------------------------------------------------------------------");
long delayTime = nowDate.getTime() - c1;
System.out.println("计划任务(1):【延迟2秒执行】");
System.out.println("实际执行任务的时间:"+sdf.format(nowDate)+",延迟时间:"+delayTime +"ms");
}
} , 2000); } }

执行结果如下:

--------------------------------------------------------------------------------
计划任务(1):【延迟2秒执行】
实际执行任务的时间:2019-05-28 01:14:13,延迟时间:2000ms

示例二:在指定时间执行任务

package com.java.scheduled.task.timer;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class ScheduledTaskDemo02 { public static void main(String[] args) { Timer timer = new Timer("timer02");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date planExecuteTime = null;
try {
planExecuteTime = sdf.parse("2019-05-27 23:58:00");
} catch (ParseException pe) {
pe.printStackTrace();
}
Date date = new Date();
System.out.println("--------------------------------------------------------------------------------");
System.out.println("安排执行任务的时间:"+sdf.format(date));
timer.schedule(new TimerTask() {
@Override
public void run() {
Date nowDate = new Date();
System.out.println("计划任务(2):【于2019-05-27 23:58:00执行任务】");
System.out.println("****预期执行任务的时间:"+sdf.format(new Date(this.scheduledExecutionTime())));
System.out.println("****实际执行任务的时间:"+sdf.format(nowDate));
}
}, planExecuteTime); } }

执行结果如下:

--------------------------------------------------------------------------------
安排执行任务的时间:2019-05-28 01:20:16
计划任务(2):【于2019-05-27 23:58:00执行任务】
****预期执行任务的时间:2019-05-27 23:58:00
****实际执行任务的时间:2019-05-28 01:20:16

示例三:延迟+周期性执行任务

package com.java.scheduled.task.timer;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class ScheduledTaskDemo03 { public static void main(String[] args) { Timer timer = new Timer("timer03");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long c2 = System.currentTimeMillis();
Date date = new Date();
System.out.println("安排执行任务的时间:"+sdf.format(date));
timer.schedule(new TimerTask() {
long exeTime = c2;
@Override
public void run() {
Date nowDate = new Date();
System.out.println("--------------------------------------------------------------------------------");
System.out.println("计划任务(3):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】");
System.out.println("****预期执行任务的时间:"+sdf.format(new Date(this.scheduledExecutionTime())));
System.out.println("****实际执行任务的时间:"+sdf.format(nowDate));
System.out.println("****距离上次执行任务的时间间隔:"+(nowDate.getTime() - exeTime)+"ms");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
exeTime = nowDate.getTime();
}
}, 1000, 2000); } }

执行结果如下:

安排执行任务的时间:2019-05-28 12:21:49
--------------------------------------------------------------------------------
计划任务(3):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:21:50
****实际执行任务的时间:2019-05-28 12:21:50
****距离上次执行任务的时间间隔:1000ms
--------------------------------------------------------------------------------
计划任务(3):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:21:53
****实际执行任务的时间:2019-05-28 12:21:53
****距离上次执行任务的时间间隔:3001ms
--------------------------------------------------------------------------------
计划任务(3):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:21:56
****实际执行任务的时间:2019-05-28 12:21:56
****距离上次执行任务的时间间隔:3000ms
--------------------------------------------------------------------------------
计划任务(3):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:21:59
****实际执行任务的时间:2019-05-28 12:21:59
****距离上次执行任务的时间间隔:3002ms

示例四:定时+周期性执行任务

package com.java.scheduled.task.timer;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class ScheduledTaskDemo04 { public static void main(String[] args) { Timer timer = new Timer("timer04");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date planExecuteTime = null;
long c3 = System.currentTimeMillis();
try {
planExecuteTime = sdf.parse("2019-05-28 00:23:00");
} catch (ParseException pe) {
pe.printStackTrace();
}
Date date = new Date();
System.out.println("安排执行任务的时间:"+sdf.format(date));
timer.schedule(new TimerTask() {
long exeTime = c3;
@Override
public void run() {
Date nowDate = new Date();
System.out.println("--------------------------------------------------------------------------------");
System.out.println("计划任务(4):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】");
System.out.println("****预期执行任务的时间:"+sdf.format(new Date(this.scheduledExecutionTime())));
System.out.println("****实际执行任务的时间:"+sdf.format(nowDate));
System.out.println("****距离上次执行任务的时间间隔:"+(nowDate.getTime() - exeTime)+"ms");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
exeTime = nowDate.getTime();
}
}, planExecuteTime, 2000); } }

执行结果如下:

安排执行任务的时间:2019-05-28 12:23:17
--------------------------------------------------------------------------------
计划任务(4):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:23:17
****实际执行任务的时间:2019-05-28 12:23:17
****距离上次执行任务的时间间隔:4ms
--------------------------------------------------------------------------------
计划任务(4):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:23:20
****实际执行任务的时间:2019-05-28 12:23:20
****距离上次执行任务的时间间隔:3002ms
--------------------------------------------------------------------------------
计划任务(4):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:23:23
****实际执行任务的时间:2019-05-28 12:23:23
****距离上次执行任务的时间间隔:3001ms
--------------------------------------------------------------------------------
计划任务(4):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:23:26
****实际执行任务的时间:2019-05-28 12:23:26
****距离上次执行任务的时间间隔:3002ms

示例五:延迟+周期性执行任务

package com.java.scheduled.task.timer;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class ScheduledTaskDemo05 { public static void main(String[] args) {
Timer timer = new Timer("timer05");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
System.out.println("安排执行任务的时间:"+sdf.format(date));
long c2 = date.getTime();
timer.scheduleAtFixedRate(new TimerTask() {
long exeTime = c2;
@Override
public void run() {
Date nowDate = new Date();
System.out.println("--------------------------------------------------------------------------------");
System.out.println("计划任务(5):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】");
System.out.println("****预期执行任务的时间:"+sdf.format(new Date(this.scheduledExecutionTime())));
System.out.println("****实际执行任务的时间:"+sdf.format(nowDate));
System.out.println("****距离上次执行任务的时间间隔:"+(nowDate.getTime() - exeTime)+"ms");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
exeTime = nowDate.getTime();
}
}, 1000, 2000);
} }

执行结果如下:

安排执行任务的时间:2019-05-28 12:24:29
--------------------------------------------------------------------------------
计划任务(5):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:24:30
****实际执行任务的时间:2019-05-28 12:24:30
****距离上次执行任务的时间间隔:1001ms
--------------------------------------------------------------------------------
计划任务(5):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:24:32
****实际执行任务的时间:2019-05-28 12:24:33
****距离上次执行任务的时间间隔:3003ms
--------------------------------------------------------------------------------
计划任务(5):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:24:34
****实际执行任务的时间:2019-05-28 12:24:36
****距离上次执行任务的时间间隔:3002ms
--------------------------------------------------------------------------------
计划任务(5):【延迟1秒执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:24:36
****实际执行任务的时间:2019-05-28 12:24:39
****距离上次执行任务的时间间隔:3002ms

示例六:定时+周期性执行任务

package com.java.scheduled.task.timer;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class ScheduledTaskDemo06 { public static void main(String[] args) {
Timer timer = new Timer("timer06");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date planExecuteTime = null;
try {
planExecuteTime = sdf.parse("2019-05-28 00:23:00");
} catch (ParseException pe) {
pe.printStackTrace();
}
Date date = new Date();
System.out.println("安排执行任务的时间:"+sdf.format(date));
long c3 = date.getTime();
timer.scheduleAtFixedRate(new TimerTask() {
long exeTime = c3;
@Override
public void run() {
Date nowDate = new Date();
System.out.println("--------------------------------------------------------------------------------");
System.out.println("计划任务(6):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】");
System.out.println("****预期执行任务的时间:"+sdf.format(new Date(this.scheduledExecutionTime())));
System.out.println("****实际执行任务的时间:"+sdf.format(nowDate));
System.out.println("****距离上次执行任务的时间间隔:"+(nowDate.getTime() - exeTime)+"ms");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
exeTime = nowDate.getTime();
}
}, planExecuteTime, 2000);
} }

执行结果如下:

安排执行任务的时间:2019-05-28 12:32:44
--------------------------------------------------------------------------------
计划任务(6):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:33:00
****实际执行任务的时间:2019-05-28 12:33:00
****距离上次执行任务的时间间隔:15482ms
--------------------------------------------------------------------------------
计划任务(6):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:33:02
****实际执行任务的时间:2019-05-28 12:33:03
****距离上次执行任务的时间间隔:3004ms
--------------------------------------------------------------------------------
计划任务(6):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:33:04
****实际执行任务的时间:2019-05-28 12:33:06
****距离上次执行任务的时间间隔:3001ms
--------------------------------------------------------------------------------
计划任务(6):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:33:06
****实际执行任务的时间:2019-05-28 12:33:09
****距离上次执行任务的时间间隔:3000ms
--------------------------------------------------------------------------------
计划任务(6):【于2019-05-28 00:23:00执行第一次任务,之后每过2秒执行一次任务】
****预期执行任务的时间:2019-05-28 12:33:08
****实际执行任务的时间:2019-05-28 12:33:12
****距离上次执行任务的时间间隔:3001ms

定时任务-Timer的更多相关文章

  1. Java基础--定时任务Timer

    Java基础--定时任务Timer 一.Timer介绍 java.util.Timer java.util.TimerTask Timer是一个定时器类,通过该类可以为指定的定时任务进行配置.Time ...

  2. Java基础--定时任务Timer(转载)

    Java基础--定时任务Timer 一.Timer介绍 java.util.Timer java.util.TimerTask Timer是一个定时器类,通过该类可以为指定的定时任务进行配置.Time ...

  3. JAVA定时任务Timer

    故事起因 因业务需要,写了一个定时任务Timer,任务将在每天的凌晨2点执行,代码顺利码完,一切就绪,开始测试.运行程序,为了节省时间,将系统时间调整为第二天凌晨1点59分,看着秒针滴答滴答的转动,期 ...

  4. Java定时任务Timer、TimerTask与ScheduledThreadPoolExecutor详解

     定时任务就是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,本文从从JDK自带的一些方法来实现定时任务的需求. 一.Timer和TimerTask  Timer和Tim ...

  5. 详解java定时任务---Timer篇

    一.简介      在java的jdk中提供了Timer.TimerTask两个类来做定时任务. Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,而TimerTask一个抽象类,它的子 ...

  6. Java之旅--定时任务(Timer、Quartz、Spring、LinuxCron)

    在Java中,实现定时任务有多种方式,本文介绍4种,Timer和TimerTask.Spring.QuartZ.Linux Cron. 以上4种实现定时任务的方式,Timer是最简单的,不需要任何框架 ...

  7. 服务器启动完成执行定时任务Timer,TimerTask

    由于项目需求:每隔一段时间就要调外部接口去进行某些操作,于是在网上找了一些资料,用了半天时间弄好了,代码: import java.util.TimerTask; public class Accou ...

  8. java定时任务Timer与ScheduledExecutorService<转>

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. ...

  9. java web定时任务---Timer

    写在前面: 在最近的项目中需要每天定时对数据库表进行查询,并完成相关数据的更新操作.首先让我想到的是Timer类,记得在一开始维护那个老系统的时候,开了个接口,也涉及到了定时的操作.下面就记录下大概的 ...

随机推荐

  1. 为什么在启动linux后进入终端提示sh-3.2#

    这是Linux系统环境变量设置问题,用户登陆后确保是root权限,可以用如下这两条命令解决:-bash-3.2# cp /etc/skel/.{bash_profile,bashrc} ~-bash- ...

  2. 如何应用 AutoIt 修改本机的防火墙配置?(开启,关闭防火墙,添加程序信任到防火墙)

    以前,公司的实施人员配置好项目之后,不同的机器之间经常性的无法建立链接,后来发现是防火墙的设置.虽然是个小问题,但是经常性的忘记这个配置. 现在,我决定把对防火墙的设置,加入到我给实施人员的配置工具中 ...

  3. poj3417 Network——LCA+树上差分

    题目:http://poj.org/problem?id=3417 根据一条边被几个环覆盖来判断能不能删.有几种情况等: 用树上差分,终点 s++,LCA s-=2,统计时计算子树s值的和即可: 用S ...

  4. bzoj2730矿场搭建——点双连通分量

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2730 首先一遍tarjan找出割点,将图缩点,这些大点中如果有只包含一个割点的,那么如果这个 ...

  5. staruml详解

    一.用例图   1.说明        1.1  用例图说明的事谁要使用系统以及他们使用该系统可以做些什么?  <业务需求>        1.2  解析一个用例图,我们可以发现它包含4个 ...

  6. asp.net中FileUpload得到上传文件的完整路径

    asp.net中FileUpload得到上传文件的完整路径 Response.Write("完整路径:" + Server.MapPath(FileUpload1.PostedFi ...

  7. ASP.NET Web应用程序修改页面Inherits示例

    <@page 中 Codebehind .Inherits 和aspx的关系 CodeBehind 指定包含与页关联的类的已编译文件的名称.该属性不能在运行时使用. 说明: 提供此属性是为了与以 ...

  8. 超级简单的跨平台高性能音视频播放框架QtAv编译指南

    目录 一.了解QtAv 二.相关文章 三.下载QtAv源码 四.下载QtAv依赖库 五.设置环境变量 1.gcc设置方式 2.msvc(cl)设置方式 六.编译 七.测试 一.了解QtAv 这几天抱着 ...

  9. 1.8 Hive运行日志配置和查看

    一.配置文件 1.重命名配置文件 # 把/opt/modules/hive-0.13.1/conf/hive-log4j.properties.template重命名为hive-log4j.prope ...

  10. TP5之一次选择多张图片并预览

    点击选择图片(可选多张),确定后将选择的图片显示在页面上,已经选择的图片也可以删除,点击提交将图片提交给后台. 1.效果图 2.code 用input标签并选择type=file,记得带上multip ...