总结

1、执行计划的任务放在TimerTask的子类中,由Timer进行该任务。

2、创建一个Timer就是启动一个新的线程,直至Timer里的任务执行完毕,才会结束。希望创建的线程为守护线程,则创建时需设置Timer timer=new Timer(true);

3、执行任务的时间早于当前时间,任务会立即执行。

4、TimerTask是以队列的方式一个个顺序执行的。当前面的任务消耗时间较长,则后面的任务运行的时间也会延后。

比如,假定Task1执行需2s,Task2在Task1开始之后1s需被执行。结果是执行完Task1后,立即执行Task2。(实际也符合第3点)

5、如果没有延迟,则执行任务的时间是上一次任务开始的时间加上poried的时间。如果延迟了,则执行任务的时间为上一个任务的结束时间。(补充第4条)

6、方法schedule和scheduleAtFixedRate的区别在于后者有追赶执行性。(下面由代码解释)

7、异常方面。如果timer中执行任务时发生异常,则结束该timer线程,不会在执行任何任务。

常用例子

1、示例

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by zay on 2016/12/8.
*/ public class TimerTest {
public static void main(String[] args) {
System.out.println("当前时间:"+new Date()); //执行计划的任务放在TimerTask的子类中,由Timer进行该任务。
Timer timer = new Timer(); //创建一个任务,1s后开始执行,并此后每隔2s执行。
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date() + "任务一");
}
},1000,2000); //创建一个任务,十天后执行。
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE,1);
Date runDate = calendar.getTime(); timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date() + "任务二");
}
},runDate); //timer.cancel(); 调用TImer的cancel()方法会清空该TImer的所有任务。
//timerTask.cancel(); 调用TImerTask的cancel()方法则会在TImer中取消该任务。
}
}

2、方法schedule和scheduleAtFixedRate的区别在于后者有追赶执行性。

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; /**
* Created by zay on 2016/12/8.
*/
public class TimerTest {
public static void main(String[] args) {
System.out.println("当前时间:"+new Date()); Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.SECOND,-100); //设置一个比较早的时间
Date earlyDate = calendar.getTime(); Timer timer = new Timer();
System.out.printf(new Date() + " 现在开始执行任务");
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date() + " 任务一");
}
},earlyDate,5000); /*timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date() + " 任务一");
}
},earlyDate,5000);*/ }
}

// schedule方法的输出(注意比对执行任务的时间)                //scheduleAtFixedRate方法的输出

     

解释:当执行任务的时间早于当前时间时,比如示例中,执行任务的时间早于当前任务100s,那么这段时间理论应该有的任务怎么处理呢?

schedule选择抛弃不理,以当前的时间为新的起点,而scheduleAtFiexdRate则会一口气将这些任务顺序都执行完毕。

【java】定时器的更多相关文章

  1. java定时器和多线程实践记录

    这几天因为需要测试mongodb读写分离的问题,因此写了个定时查询程序,并且用到了多线程,以达到定时启动多个线程查询数据库的效果,下边代码记录备忘: package timmer; import ja ...

  2. java定时器,Spring定时器和Quartz定时器

    一.java定时器的应用 其实java很早就有解决定时器任务的方法了,java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Tim ...

  3. Java定时器:Timer

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

  4. Java定时器应用

    在Java多线程中,有的时候,我们需要按照指定间隔时间来执行一些任务,这时,我们就要用到定时器.我们在这里以Java中的Timer定时器为例,演示定时器的应用. 请看下述代码: import java ...

  5. java定时器实现总结

    前言:Java定时器目前主要有3种实现方式:JDK组件,Spring Task,Quartz框架. 1. JDK组件(1) java.util.TimerTask MyTimerTask.java: ...

  6. Java定时器TimeTask

    package com.alan.timer; import java.util.Calendar;import java.util.Date;import java.util.Timer;impor ...

  7. Java定时器Timer

    Java定时器Timer在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类,执行计划任 ...

  8. [Java定时器]用Spring Task实现一个简单的定时器.

    今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...

  9. 关于java 定时器的使用总结

    直接上代码,代码中有注释(代码中还有一些本人的其他测试,读者可以忽略不计).读者在代码中发现了bug,欢迎指正. package j2se.system.test; import java.text. ...

  10. java定时器的使用

    定时器类Timer在java.util包中.使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后 ...

随机推荐

  1. 安卓中級教程(2):@InjectView中的對象inject

    package com.example.ele_me.util; import java.lang.annotation.Annotation; import java.lang.reflect.Fi ...

  2. PHP运算符===和==的区别 小细节

    区别: ===是恒等计算符   同时检查表达式的值与类型 ==是比较运算符号  不会检查条件式的表达式的类型 举例 if (strstr($new_url,'http://') === false) ...

  3. ListView简单使用

    先上效果: 主要实现了Listview的绑定和点击事件.项目资源结构如下: 先创建一个动物类,用来装载数据: Animal类如下: package com.example.simplelistview ...

  4. Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)

    最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...

  5. tcpdump教程入门

    tcpdump是一个最基本重要的网络分析工具, 掌握好这, 对于学习tcp/ip协议也是很有帮助的. 理解了tcp/ip协议栈的知识, 分析调优网络的能力才会更高. 所以使用tcpdump相比其它的工 ...

  6. jquery实时监测手机号是否符合规则,并根据手机号检测结果将提交按钮设为不同状态

    功能: 输入手机号,实时判断手机号输入的是否符合规则: 如果不合规则,则提交按钮为禁用状态,手机号信息不可提交,按钮显示灰色背景: 如果符合规则,则可提交所输入的手机号信息,并将按钮背景设成红色. 代 ...

  7. PRML读书笔记——Introduction

    1.1. Example: Polynomial Curve Fitting 1. Movitate a number of concepts: (1) linear models: Function ...

  8. GIS简单计算Helper类

    using System; using ESRI.ArcGIS.Client.Geometry; namespace GISProject.Extensions { /// <summary&g ...

  9. CPlus的简单线程的制作

    1.线程需要用到<widnows.h> 2.利用句柄创建并执行线程: HANDLE hThread = CreateThread(NULL, 0, Fun, &tp, 0, NUL ...

  10. 什么是JSP?它有哪些特点?

    什么是JSP? 它有哪些特点?  JSP是服务器端的一种基于java语言的网页技术,它是由一些JSP标记,java程序段以及HTML文件组成的结合体,以java语言作为其内置的脚本语言.  实质上是通 ...