使用 Timer 进行任务调度

来源:互联网 发布:刘备是汉室宗亲吗 知乎 编辑:程序博客网 时间:2024/05/01 09:02
package com.huyd.xiancheng;


import java.util.Timer;
import java.util.TimerTask;
/**
 * 
 *  使用 Timer 进行任务调度
 *  
 *  使用 Timer 实现任务调度的核心类是 Timer 和 TimerTask。
 *  其中 Timer 负责设定 TimerTask 的起始与间隔执行时间。
 *  使用者只需要创建一个 TimerTask 的继承类,实现自己的 run 方法,然后将其丢给 Timer 去执行即可。
Timer 的设计核心是一个 TaskList 和一个 TaskThread。
Timer 将接收到的任务丢到自己的 TaskList 中,TaskList 按照 Task 的最初执行时间进行排序。
TimerThread 在创建 Timer 时会启动成为一个守护线程。
这个线程会轮询所有任务,找到一个最近要执行的任务,然后休眠,当到达最近要执行任务的开始时间点,
TimerThread 被唤醒并执行该任务。之后 TimerThread 更新最近一个要执行的任务,继续休眠。
Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,
因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。


 * 
 * */
public class TimerDemo extends TimerTask{

private String name="";

public TimerDemo (String name){
super();
this.name=name;
}



@Override
public void run() {
System.out.println("name==>"+name);
}

/*
* schedule方法是安排指定的任务在指定的时间开始进行重复的固定延迟执行。
* 第一个时间是多少时间后执行,第二个是时间间隔
* */

public static void main(String[] args) {
Timer t1=new Timer();
long time1=1000;
long taktTime1=1*1000;
//执行第一个线程
t1.schedule(new TimerDemo("one"), time1, taktTime1);

long time2=2000;
long taktTime2=1*1000;
//执行第二个线程
t1.schedule(new TimerDemo("two"), time2, taktTime2);


}


}
0 0
原创粉丝点击