全屏

11.7 任务定时调度


【专业IT培训机构,真正零首付入学www.bjsxt.com


      通过Timer和Timetask,我们可以实现定时启动某个线程。

java.util.Timer

      在这种实现方式中,Timer类作用是类似闹钟的功能,也就是定时或者每隔一定时间触发一次线程。其实,Timer类本身实现的就是一个线程,只是这个线程是用来实现调用其它线程的。

java.util.TimerTask

      TimerTask类是一个抽象类,该类实现了Runnable接口,所以该类具备多线程的能力。

在这种实现方式中,通过继承TimerTask使该类获得多线程的能力,将需要多线程执行的代码书写在run方法内部,然后通过Timer类启动线程的执行。

【示例11-14】java.util.Timer的使用

public class TestTimer {
	public static void main(String[] args) {
		Timer t1 = new Timer();//定义计时器;
		MyTask task1 = new MyTask();//定义任务;
		t1.schedule(task1,3000);  //3秒后执行;
		//t1.schedule(task1,5000,1000);//5秒以后每隔1秒执行一次!
		//GregorianCalendar calendar1 = new GregorianCalendar(2010,0,5,14,36,57); 
		//t1.schedule(task1,calendar1.getTime()); //指定时间定时执行;	
	}
}

class MyTask extends TimerTask {//自定义线程类继承TimerTask类;
	public void run() {
		for(int i=0;i<10;i++){
			System.out.println("任务1:"+i);
		}
	}
}

      执行结果如图11-19所示:

图11-19 示例11-14运行效果图.png

图11-19 示例11-14运行效果图

      运行以上程序时,可以感觉到在输出之前有明显的延迟(大概就是3秒!)。还有几个方法,我注释掉了,大家自己试试吧!

      在实际使用时,一个Timer可以启动任意多个TimerTask实现的线程,但是多个线程之间会存在阻塞。所以如果多个线程之间需要完全独立的话,最好还是一个Timer启动一个TimerTask实现。

老鸟建议

      实际开发中,我们可以使用开源框架quanz,更加方便的实现任务定时调度。实际上,quanz底层原理就是我们这里介绍的内容。

分类导航
点击按住视频可拖动

缩小

关闭

  • 正在学习
  • 北京总部地址:北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂
  • 咨询电话:400-009-1906 010-56233821
  • Copyright 2007-2015 北京尚学堂科技有限公司
  • 京ICP备13018289号-1 京公网安备11010802015183