Java中的Timer和TimerTask的使用

c#小王子 c#小王子 2022-01-20 523 Java

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的图表

使用-JFreeChart来创建基于web的图表

XStream使用文档

XStream使用文档

WebService发布过程及常见问题

WebService发布过程及常见问题

webpack实战入门进阶调优分享

webpack实战入门进阶调优分享

weblogic调优参数及监控指标

weblogic调优参数及监控指标

weblogic节点管理

weblogic节点管理

weblogic管理控制台概述

weblogic管理控制台概述

weblogic-部署和启动

weblogic-部署和启动

WebLogic-Server-性能及调优-调优-Java-虚拟机

Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。

Velocity用户教程

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

Velocity用户手册

Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。


文章热度: 166291
文章数量: 333
推荐阅读

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

知之

知之平台是全球领先的知识付费平台。提供各个领域的项目实战经验分享,提供优质的行业解决方案信息,来帮助您的工作和学习

使用指南 建议意见 用户协议 友情链接 隐私政策 Powered by NOOU ©2020 知之