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. css3 加载动画

    代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  2. last, lastb - 显示最近登录的用户列表

    总览 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...] lastb [-R] [-num] [ -n num ] ...

  3. Python3使运行暂停的方法

    在Python3中已经有很大一部分语句与Python2不互通了,运行暂停的方法也有所不同. 1.input(); 这种方法不用包含模块,因此这也是最常用的一种暂停手段. Python2中的raw_in ...

  4. python cv2的视频检测:睁眼闭眼

    如题,想实现一个简单的根据摄像头的某一帧检测睁眼闭眼的功能. 初步的想法是: 1. cv2调用计算机摄像头,读取某一帧的画面. 2. 将该画面作为 哈尔-人脸分类器的输入接口,根据分类器结果返回分类的 ...

  5. Thiago2(TPO AI.ROSTO):集成式AI换脸软件(Autodesk Flame)

    如标题一样,Thiago2 是一款集成式AI换脸软件(TPO AI.ROSTO),需要与Autodesk Flame结合使用,从demo来看完成度还是很高的,算是一种完全GUI版的DeepFaceLa ...

  6. u-boot bl _main分析

    ldr    r0, =(CONFIG_SYS_INIT_SP_ADDR): #define CONFIG_SYS_INIT_SP_ADDR     (CONFIG_SYS_INIT_RAM_ADDR ...

  7. IDEA部署Spring-boot到Docker容器

    一.准备工作 idea安装Docker插件 centos7系统安装docker 二.打开docker远程端口 1. 编辑docker.service文件 vim /usr/lib/systemd/sy ...

  8. 【POJ2152】Fire

    题目大意:给定一棵 N 个节点的无根树,点有点权,边有边权,现需要选出一个点集,满足树上任意一个点到该点集的距离不超过该点的给定值,求选出点集点权的最小值是多少. 题解:可以发现,对于以 i 为根的子 ...

  9. python绘制国际象棋棋盘核心代码

    import turtle step = 40 for i in range(8): for j in range(8): turtle.penup() turtle.goto(i*step, j*s ...

  10. VirtualBox导入VmWare生成的.vmdk格式虚拟机镜像

    VmWare默认的镜像格式是.vmdk格式的,VirtualBox则默认是.vdi格式的.其实这在VirtualBox新建虚拟机的过程中是可选的. 导入.vmdk格式的镜像到VirtualBox只需要 ...