java调度:(三)Timer中的单线程守护

早听说Timer中是单守护进程在执行所有的任务,在调度的时候会有一些问题,现做下面例子来测试:

首先做两个简单的任务:

1. TimerJOB1

package test;

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

public class TimerJOB1 extends TimerTask {
	public TimerJOB1(){
		super();
	}
	@Override
	public void run() {
		System.out.println("TimerJOB1:开始执行时间:"+new Date());
		try {
			//让线程睡30秒
			Thread.sleep(1000*30);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("TimerJOB1结束执行时间:"+new Date());
		
	}

}

 

2.TimerJOB2

package test;

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

public class TimerJOB2 extends TimerTask {
	public TimerJOB2(){
		super();
	}
	@Override
	public void run() {
		System.out.println("TimerJOB2:开始执行时间:"+new Date());
		try {
			//让线程睡30秒
			Thread.sleep(1000*30);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("TimerJOB2结束执行时间:"+new Date());
		
	}

}

 

3. 从现在开始 1 秒钟之后,每隔 5秒执行一次 TimerJob1 ,因为TimerJob1 的执行时间是大于30s ,那么在第一次调度未完成之前第二次调度就应该开始了,会发生什么事呢?

package test;
import java.util.Timer; 

public class TestTimer {	
	
	 public static void main(String[] args) { 
	 Timer timer = new Timer(); 
	 long delay1 = 1 * 1000; 
	 long period1 = 5*1000; 
	 // 从现在开始 1 秒钟之后,每隔 5秒执行一次 job1 
	 timer.schedule(new TimerJOB1(), delay1, period1); 
	 /**
	  * <pre>
	  * 执行结果:
	  * TimerJOB1:开始执行时间:Fri Feb 22 15:20:32 CST 2013
		TimerJOB1结束执行时间:Fri Feb 22 15:21:02 CST 2013
		TimerJOB1:开始执行时间:Fri Feb 22 15:21:02 CST 2013
		TimerJOB1结束执行时间:Fri Feb 22 15:21:32 CST 2013
		TimerJOB1:开始执行时间:Fri Feb 22 15:21:32 CST 2013
		TimerJOB1结束执行时间:Fri Feb 22 15:22:02 CST 2013
		TimerJOB1:开始执行时间:Fri Feb 22 15:22:02 CST 2013
     </pre>
	  */
	 
		 } 
	}

 由上面可以看出,只有在当前的JOB完成之后才会执行下次job.

4. 分别调用两个job,都是每隔5秒,及第一个job第一次还没有执行完,第二个job第一次与第一个job第二次都该执行了,会一直调用一个job还是job1与job2轮换调用?

package test;
import java.util.Timer; 

public class TestTimer {	
	
	 public static void main(String[] args) { 
	 Timer timer = new Timer(); 
	 long delay1 = 1 * 1000; 
	 long period1 = 5*1000; 
	 // 从现在开始 1 秒钟之后,每隔 5秒执行一次 job1 
	 timer.schedule(new TimerJOB1(), delay1, period1); 
	 long delay2 = 1 * 1000; 
	 long period2 = 1*5000; 
	 // 从现在开始 1 秒钟之后,每隔 5 秒钟执行一次 job2 
	 timer.schedule(new TimerJOB2(), delay2, period2); 
	 /*
	 TimerJOB1:开始执行时间:Fri Feb 22 15:25:47 CST 2013
	 TimerJOB1结束执行时间:Fri Feb 22 15:26:17 CST 2013
	 TimerJOB2:开始执行时间:Fri Feb 22 15:26:17 CST 2013
	 TimerJOB2结束执行时间:Fri Feb 22 15:26:47 CST 2013
	 TimerJOB1:开始执行时间:Fri Feb 22 15:26:47 CST 2013
	 TimerJOB1结束执行时间:Fri Feb 22 15:27:17 CST 2013
	 TimerJOB2:开始执行时间:Fri Feb 22 15:27:17 CST 2013
	 TimerJOB2结束执行时间:Fri Feb 22 15:27:47 CST 2013
	 TimerJOB1:开始执行时间:Fri Feb 22 15:27:47 CST 2013
	 TimerJOB1结束执行时间:Fri Feb 22 15:28:17 CST 2013
	 TimerJOB2:开始执行时间:Fri Feb 22 15:28:17 CST 2013
	 */
	 } 
	

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值