Timer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,如下所示:
public abstract class TimerTask implements Runnable
可以通过继承该类,来实现自己的定时任务。
Timer定时器实例有多种构造方法:
Timer()
创建一个新计时器。
Timer(boolean isDaemon)
创建一个新计时器,可以指定其相关的线程作为守护程序运行。
Timer(String name)
创建一个新计时器,其相关的线程具有指定的名称。
Timer(String name, boolean isDaemon)
创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。
下面是一个使用Timer和TimerTask的例子:
package org.shirdrn; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { private int index = 0; private Timer timer = new Timer(); @Override public void run() { System.out.println(index + ". current time : " + new Date().getTime()); index++; } public void start() { timer.schedule(this, 5000); // 设置该定时任务MyTimerTask在5s后执行 System.out.println("scheduled time : " + this.scheduledExecutionTime()); // 打印出定时任务执行时间 } public long getScheduleTime() { return this.scheduledExecutionTime(); } public static void main(String[] args) { MyTimerTask mtt = new MyTimerTask(); mtt.start(); } }
可以得到如下输出:
scheduled time : 1233552478062
0. current time : 1233552478062
这里,只是设置了一个定时任务,只是执行一次。可以调用Timer的scheduleAtFixedRate方法来设置定时任务执行时间,并以指定的速率来重复执行定时任务,修改start方法,如下:
public void start() { timer.scheduleAtFixedRate(this, new Date(), 2000); // 设置定时任务执行时间,及其速率(2s执行一次) System.out.println("scheduled time : " + this.scheduledExecutionTime()); }
可以得到类似如下的输出:
scheduled time : 1233552825031
0. current time : 1233552825031
1. current time : 1233552827031
2. current time : 1233552829031
3. current time : 1233552831046
4. current time : 1233552833031
5. current time : 1233552835031
6. current time : 1233552837031
7. current time : 1233552839031
8. current time : 1233552841031
可见,使用scheduleAtFixedRate方法设置,可以使run方法体中的代码重复执行,也就是重复执行定时任务,相当于在线程的run方法体中使用一个无穷循环。
另外,Timer类中定义了一个定时任务队列,用来管理基于该定时器Timer的所有定时任务。可以定义多个定时任务,同时指定一个定时器,用同一个定时器来安排定时任务,例如:
package org.shirdrn; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class YourTimerTask extends TimerTask { private String name; // 定时任务的名称 public YourTimerTask(String name) { this.name = name; } @Override public void run() { System.out.println(name + "-> current time : " + new Date().getTime()); } public void setTimer(Timer timer) { timer.scheduleAtFixedRate(this, new Date(), 2000); System.out.println("scheduled time : " + this.scheduledExecutionTime()); } public String getName() { return this.name; } }
Java中的Timer和TimerTask的使用(二)
该类YourTimerTask 是一个定时任务类,可以实例化多个定时任务的实例。
创建一个Timer定时器实例,并为多个定时任务设置同一个定时器,如下所示:
package org.shirdrn; import java.util.Date; import java.util.Timer; public class TimerTaskTest { public static void main(String[] args) { Timer timer = new Timer(); YourTimerTask ytta = new YourTimerTask("a"); YourTimerTask yttb = new YourTimerTask("b"); YourTimerTask yttc = new YourTimerTask("c"); ytta.setTimer(timer); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } yttb.setTimer(timer); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } yttc.setTimer(timer); } }
运行结果如下所示:
scheduled time : 1233554559343
a-> current time : 1233554559343
a-> current time : 1233554561343
scheduled time : 1233554559343
b-> current time : 1233554561343
scheduled time : 1233554561359
b-> current time : 1233554563359
a-> current time : 1233554563359
c-> current time : 1233554563359
b-> current time : 1233554565343
a-> current time : 1233554565343
c-> current time : 1233554565375
a-> current time : 1233554567343
b-> current time : 1233554567343
c-> current time : 1233554567375
b-> current time : 1233554569343
a-> current time : 1233554569343
c-> current time : 1233554569375
a-> current time : 1233554571343
b-> current time : 1233554571343
c-> current time : 1233554571375
可以通过调用Timer类的cancel方法终止该定时器,调用purge方法重该定时器队列中移除所有已经取消的定时任务。
更多的可以参考帮助文档:
void cancel()
终止此计时器,丢弃所有当前已安排的任务。
int purge()
从此计时器的任务队列中移除所有已取消的任务。
void schedule(TimerTask task, Date time)
安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schedule(TimerTask task, long delay)
安排在指定延迟后执行指定的任务。
void schedule(TimerTask task, long delay, long period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定速率执行。
void scheduleAtFixedRate(TimerTask task, long delay, long period)
安排指定的任务在指定的延迟后开始进行重复的固定速率执行。
【下载地址】
百度网盘链接:https://pan.baidu.com/s/1pCqAmq_oLadhHla-nSzLig
提取码:yift
相关文章
使用-JFreeChart来创建基于web的图表
XStream使用文档
WebService发布过程及常见问题
webpack实战入门进阶调优分享
weblogic调优参数及监控指标
weblogic节点管理
weblogic管理控制台概述
weblogic-部署和启动
WebLogic-Server-性能及调优-调优-Java-虚拟机
Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。
FlashFXP绿色版网盘下载,附激活教程 1781
FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具
Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1564
firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ
navicat for mysql中文绿色版网盘下载 1623
Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq
火车头采集器(旗舰版)绿色版网盘下载 1707
火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA
Photoshop(CS-2015-2023)绿色中文版软件下载 1823
安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64