java多线程编程核心技术(学习笔记五 )

5.1 定时器Timer的使用

  Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务。

  Timer类主要作用是设置计划任务,但封装任务的类为TimeTask类,TimeTask类为抽象类,需自己编写类继承它,并实现其run方法。

  timer类的主要方法:

  1)schedule(TimeTask task,Date time):执行的日期执行一次某一任务

   如果执行任务的时间晚于当前时间,则任务按照执行任务时间执行,如果执行任务时间早于当前时间,则按当前时间执行。

package p5;

import java.util.Date;
import java.util.TimerTask;

public class MyTask1 extends TimerTask{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("任务执行时间为:"+new Date());
	}

}
package p5;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;

public class Test1 {
public static void main(String[] args) {
	System.out.println("当前时间为:"+new Date());
	Calendar calendar=Calendar.getInstance();
	calendar.add(Calendar.SECOND, 10);
	Date runDate=calendar.getTime();
	MyTask1 myTask1=new MyTask1();
	Timer timer=new Timer();
	timer.schedule(myTask1, runDate);
	
}
}

Timer中允许有多个TimerTask任务,TimerTask是以队列的方式一个一个地被顺序地执行,所以执行的时间可能和预期时间不一致,因为前面的任务有可能消耗的时间较长,则后面的任务的运行时间也被延长。

 假设有两个任务,任务一规定在18:10执行,任务二规定在18:15执行,然而任务一执行时间为10s,即18:20才执行完毕,此时任务二只能被迫延迟到18:20开始执行。


  2)schedule(TimeTask task,Date firstTime,long period):在指定的日期后按指定的间隔周期,无线循环地执行某一任务。

   如: timer.schedule(task,runDate,4000);

  3)TimerTask类的cancel()方法:将自身从任务队列中进行清除,其他任务不受影响。

       Timer类的cancel()方法:将任务队列中全部的任务清空,并且销毁进程。

 注:Timer类中的cancel()方法有时并不一定会停止计划任务,而是正常执行。因为Timer类中的cancel()方法有时并没有争抢到queue锁,则让TimeTask类中的任务正常执行。

 4)schedule(TimeTask task,long delay):当前的时间为参考时间,在此时间基础上延迟指定的毫秒数后执行一次TimeTask任务

 5)schedule(TimeTask task,long delay,long period):当前时间为参考时间,在此时间基础上延迟指定的毫秒数,再以某一间隔时间无限次数地执行某一任务。

你可能感兴趣的:(java多线程编程核心技术(学习笔记五 ))