Java Timer类

来源:互联网 发布:准备配置windows很久 编辑:程序博客网 时间:2024/04/28 14:34

使用java中的Timer实现任务调度的核心类是Timer和TimerTask。其中Timer负责设定TimerTask的起始与结束时间。使用者只需要创建一个TimerTask的继承类,实现自己的run方法,然后将其丢给Timer去执行。(如下实例:)

package com.yc.quartz.example;import java.util.Timer;import java.util.TimerTask;/** * @author Chris *  */public class TimerTest extends TimerTask {private String jobName = "";public TimerTest(String jobName) {this.jobName = jobName;}@Overridepublic void run() {System.out.println("execute " + jobName);}public static void main(String[] args) {Timer timer = new Timer();long delay1 = 1 * 1000;long period1 = 1000;// 从现在开始 1 秒钟之后,每隔 1 秒钟执行一次 job1timer.schedule(new TimerTest("job1"), delay1, period1);long delay2 = 2 * 1000;long period2 = 2000;// 从现在开始 2 秒钟之后,每隔 2 秒钟执行一次 job2timer.schedule(new TimerTest("job2"), delay2, period2);}}

运行后的结果为:

execute job1execute job1execute job2execute job1execute job1execute job2

Timer 的设计核心是一个TaskList和TaskThread。

Timer将接收到的任务丢到自己的TaskList中,TaskList按照Task的最初执行时间进行排序。
TaskThread在创建Timer时会启动成为一个守护线程。这个线程会轮询所有任务,找到一个最近要执行的任务,然后休眠,当到达最近要执行任务的开始时间点TaskThread被唤醒并执行该任务。之后TimerThread更新最近一个要执行的任务继续休眠。

Timer的优缺点 :
优点:Timer的优点在于简单易用。
缺点:Timer的所有任务都是由同一个线程调度的,因此所有任务都是串行执行的。同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。

转载自:http://blog.csdn.net/hehexiaoyou/article/details/23428791

原创粉丝点击