【java】定时器

总结

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则会一口气将这些任务顺序都执行完毕。

时间: 2024-11-06 10:54:31

【java】定时器的相关文章

Java 定时器使用

// 定时器 privateTimer timer; timer = new Timer(); timer.schedule(new TimerTask() { public void run() { task(); } }, new Date(), 60*1000); public void task() { } Java 定时器使用,布布扣,bubuko.com

整理:java定时器。

本文纯属个人思路,如有错误,请指正. java的Timer依赖Thread,每一个Timer实际上都是一个Thread. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import java.util.TimerTask; /**  * 本类仅为实现TimerTask,意义不大.  * @author 9082046**@qq.com  *  */ public class Task  extends TimerTask {       public void run()

java定时器实现总结

前言:Java定时器目前主要有3种实现方式:JDK组件,Spring Task,Quartz框架. 1. JDK组件(1) java.util.TimerTask MyTimerTask.java: public class MyTimerTask extends TimerTask { @Override public void run() { System.out.println("MyTimerTask, now: " + new SimpleDateFormat("y

Java定时器:Timer

项目中往往会遇到需要定时的任务,例如订单,当用户在某个规定时间内没有操作订单时,订单状态将会发生改变. 那么在这种情况下,我们会用到定时器. 举例: 1 import java.util.Timer; 2 3 4 /** 5 * java定时器 6 * @author Administrator 7 * 8 */ 9 public class TimeTaskTest { 10 public static void main(String[] args) { 11 Timer timer = n

java 定时器的使用

在北京这边实习也一个多月了,也接触了不少东西,今天领导开会,说服务器压力太大,客户很不满意,访问速度上要求很苛刻,我们项目里的一些操作,没有必要写成动态的都改写成静态的,每天定时更新一下静态html页面里面的内容(因为客户每天会定时更新一些内容,而且只更新一次). 听得我好蒙啊,我头一次听说java 的定时操作呢!要命的东西,好坑的啊,晚上抽出了时间,学习了一下java的定时器,也就是一些基本的操作. java定时器主要用到两个类:Timer(计划任务调度类)和TimerTask(具体任务类)

java定时器

以下内容根据 JavaTM Tutorial 和相关API doc和网上的资料翻译整理,以供日后查看和参考: 1.描述 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 简单的一个例程: import java.util.Timer; import java.util.TimerTask; /** * Simple demo that uses java.util.T

Java定时器TimeTask

package com.alan.timer; import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;/** * Java定时器 * @author 邵海雄 * @date 2016年9月27日 下午5:38:19 * @version v1.0 */public class TimerTest { // 第一种方法:设定指定任务task在指定时间time

Java定时器的使用(Timer简介)

在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作.这时候我们就要去设置个定时器,Java中最方便.最高效的实现方式是用java.util.Timer工具类,再通过调度java.util.TimerTask任务. 1.简介 Timer是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.实际上是个线程,定时调度所拥有的TimerTasks. TimerTask是一个抽象类,它的子类由 Timer 安排为一次执行或重复执行的任务.实际上就是一

我的第一个java定时器

在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作.这时候我们就要去设置个定时, 接下来就去开发我的第一个java定时器吧,Java计时器实用程序允许您执行线程或任务在一个预先确定的将来的时间,并根据一组这些任务可以重复频率. 设计和实现一个计时器,会用到model-control-view(MVC)设计模式. 开始: 首先来构w建一个最简单的java web 项目吧.这里我用的是最myeclipse,好处自然不必多说,谁用谁知道,当然如果 你要用其他IDE也可以. 在mye

java定时器的使用

java定时器的使用(Timer) 1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等. 对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. privatejava.util.Timer timer; timer = newTimer(true); timer.schedule( newjava.util.TimerTask() { public void run() {//server.checkNewMail(); 要操作的方法} }, 0