Java定时器Timer
在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时开始执行某一个任务。Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类,执行计划任务的代码要放入TimerTask的子类中,因为TimerTask是一个抽象类。下面通过实例说一说,如何实现指定时间执行任务以及实现指定周期执行任务。
在指定时间执行
方法schedule(TimerTask,Date time),该方法的作用是在指定的日期执行一次某一任务。
执行任务类MyTask

public class MyTask extends TimerTask{
@Override
public void run() {
System.out.println("任务执行了,时间为:" + new Date());
System.gc(); // 回收Timer
this.cancel(); //结束当前线程
}
}

场景1:执行任务晚于当前时间--延迟执行

public class Test {
public static void main(String[] args) {
System.out.println("当前时间为:" + new Date());
Calendar calen = Calendar.getInstance();
calen.add(Calendar.SECOND,5);
Date runDate = calen.getTime();
MyTask task = new MyTask();
Timer timer = new Timer();
timer.schedule(task,runDate);
}
}

执行结果:

Connected to the target VM, address: '127.0.0.1:63242', transport: 'socket'

当前时间为:Wed Nov 14 17:19:53 CST 2018
任务执行了,时间为:Wed Nov 14 17:19:58 CST 2018
Disconnected from the target VM, address: '127.0.0.1:63242', transport: 'socket'
Process finished with exit code 0
场景2:执行任务的时间早于当前时间--立即执行
public class Test1 {
public static void main(String[] args) {
System.out.println("当前时间为:" + new Date());
Calendar calen = Calendar.getInstance();
calen.add(Calendar.SECOND,-10);
Date runDate = calen.getTime();
MyTask task = new MyTask();
Timer timer = new Timer();
timer.schedule(task,runDate);
}
}
执行结果:
Connected to the target VM, address: '127.0.0.1:63249', transport: 'socket'
当前时间为:Wed Nov 14 17:20:58 CST 2018
任务执行了,时间为:Wed Nov 14 17:20:58 CST 2018
Disconnected from the target VM, address: '127.0.0.1:63249', transport: 'socket'
Process finished with exit code 0
场景3:Timer中允许有多个TimerTask
public class Test2 {
public static void main(String[] args) {
System.out.println("当前时间为:" + new Date());
Calendar calen1 = Calendar.getInstance();
calen1.add(Calendar.SECOND,5);
Date runDate1 = calen1.getTime();
MyTask task1 = new MyTask(); Calendar calen2 = Calendar.getInstance();
calen2.add(Calendar.SECOND,-10);
Date runDate2 = calen2.getTime();
MyTask task2 = new MyTask(); Timer timer = new Timer();
timer.schedule(task1,runDate1);
timer.schedule(task2,runDate2); }
}
执行结果:
Connected to the target VM, address: '127.0.0.1:63292', transport: 'socket'
当前时间为:Wed Nov 14 17:23:02 CST 2018
任务执行了,时间为:Wed Nov 14 17:23:02 CST 2018
任务执行了,时间为:Wed Nov 14 17:23:07 CST 2018
Disconnected from the target VM, address: '127.0.0.1:63292', transport: 'socket'
Process finished with exit code 0

周期性执行

方法schedule(TimerTask,Date firstTime,long period),改方法的作用是在指定的日期之后按指定的时间间隔周期,无线循环地执行某一任务。
执行类:MyTask1
public class MyTask1 extends TimerTask{
@Override
public void run() {
System.out.println("任务执行了,时间为:" + new Date());
}
}
测试类:Test3
public class Test3 {
public static void main(String[] args) {
System.out.println("当前时间为:" + new Date());
Calendar calen = Calendar.getInstance();
calen.add(Calendar.SECOND,5);
Date runDate = calen.getTime();
MyTask1 task = new MyTask1();
Timer timer = new Timer();
timer.schedule(task,runDate,4000);
}
}
执行结果:
Connected to the target VM, address: '127.0.0.1:63382', transport: 'socket'
当前时间为:Wed Nov 14 17:35:36 CST 2018
任务执行了,时间为:Wed Nov 14 17:35:41 CST 2018
任务执行了,时间为:Wed Nov 14 17:35:45 CST 2018
任务执行了,时间为:Wed Nov 14 17:35:49 CST 2018
任务执行了,时间为:Wed Nov 14 17:35:53 CST 2018
任务执行了,时间为:Wed Nov 14 17:35:57 CST 2018
注意:
1)TimerTask类中的cancel()方法的做事是将自身从任务队列中进行清除
2)Timer类中的cancel()方法的作用是将任务队列中的全部任务进行清空。

Java定时器Timer的更多相关文章

  1. Java定时器Timer,TimerTask每隔一段时间随机生成数字

    1:java.util.Timer类是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行. 2:TimerTask类是由 Timer 安排为一次执行或重复执行的任务 ...

  2. java定时器Timer的使用

    Time类主要负责完成定时计划任务的功能,就是在指定的时间的开始执行某个任务. Timer类的作用是设置计划任务,而封装任务内容的类是TimerTask类.此类是一个抽象类,继承需要实现一个run方法 ...

  3. Java定时器Timer简述

    概述 主要用于Java线程里指定时间或周期运行任务.Timer是线程安全的,但不提供实时性(real-time)保证. 构造函数 Timer() 默认构造函数. Timer(boolean) 指定关联 ...

  4. Java 定时器 Timer 的使用.

    一.概念       定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的.在JDK中Timer类主要负责计划任务的功能, ...

  5. Java定时器Timer的使用详解

     转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6374714.html 定时器在Web开发中使用得不是很多.这里主要列举一下使用定时器的步骤,方便日后使用时查 ...

  6. Java定时器Timer使用方法详解

    感谢大佬:https://www.jb51.net/article/129808.htm 一.概念 定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和 ...

  7. java多线程--定时器Timer的使用

    定时的功能我们在手机上见得比较多,比如定时清理垃圾,闹钟,等等.定时功能在java中主要使用的就是Timer对象,他在内部使用的就是多线程的技术. Time类主要负责完成定时计划任务的功能,就是在指定 ...

  8. Java 中Timer和TimerTask 定时器和定时任务使用的例子

    转自:http://blog.csdn.net/kalision/article/details/7692796 这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求 Timer类是用来执行任 ...

  9. Java定时器:Timer

    项目中往往会遇到需要定时的任务,例如订单,当用户在某个规定时间内没有操作订单时,订单状态将会发生改变. 那么在这种情况下,我们会用到定时器. 举例: import java.util.Timer; / ...

随机推荐

  1. css练习小总结

    1.div水平居中:/*设置div宽度后,margin:0 auto:*/2.div显示在一行:/*float:left:*/ 3.text-align:/*后面标签里的内容水平居中:*/4.alig ...

  2. 68. Text Justification (JAVA)

    Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...

  3. IDEA设置类头,方法头自定义内容~图文

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

  4. oracle使用between and边界问题

    如果是只查询某两个月之间的数据,会默认从每个月的1号开始查,包前包后 eg:select * from test_hsj where regdate between to_date('2015-05' ...

  5. Maven工程构建

    Maven 相关术语: 本地资源库:用来存储项目的依赖库,默认的文件夹是 “.m2” 目录 中央存储库: 用来下载所有项目的依赖库的默认位置 Maven pom.xml: 项目对象模型(Project ...

  6. SpringBoot框架(3)--条件装配

    场景:需要根据系统的编码格式有选择装配类. 分析:最直接的实现方式,定义各种编码格式对应的处理类,可以通过System.getProperty("file.encoding")获得 ...

  7. wepy框架换行

    上图所圈的写法会造成如下图所示 在微信开发工具是没有问题的,在真机 运行下会出现空格问题. 解决如下:

  8. CMDB架构需求实现

    CMDB资产管理部分实现 需求 1.存储所有IT资产信息 2.数据可手动添加 3.硬件信息可自动收集 4.硬件信息可自动变更 5.可对其他系统灵活开放API 6.API接口安全认证 立业之本:定义表结 ...

  9. c++linux多线程基础知识

    http://blog.csdn.net/lovecodeless/article/details/24929273 http://blog.csdn.net/Jiangweihll/article/ ...

  10. Mapnik连接文件数据、数据库中的vertor数据和raster数据

    Mapnik的XML文件,选择其中一个Datasource. <?xml version="1.0" encoding="utf-8"?> < ...