根据指定时间执行方法

有时候我们需要一些代码在指定的时间段内运行,如何实现呢?java为我们提供了两个类(java.util.Timer,java.util.TimerTask)。
Timer类:一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
TimerTask类:由 Timer 安排为一次执行或重复执行的任务。
Timer类注意点:1.所有构造方法都启动计时器线程。
2.被执行的类要继承TimerTask类
下面有个实例帮助大家了解一下:先说明一下我的这个例子是做什么的:本来我是想按照下面安排的时间(每天的时间安排)去执行代码,但是发现这样演示效果不太明显,所以我把每运行完的任务,会获取运行前的时间再加上5秒,这个时间就是下一次执行的时间,这样演示效果会明显一点。
代码部分:

package com.sxt.cooperation;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
/**
 * 使用任务调度管理器模拟现实中的闹钟
 * 每天的时间安排
 * 1.6点起床跑步
 * 2.7点刷牙洗脸
 * 3.8点上班
 * 4.12点吃午饭
 * 5.17点下班
 * 6.18点健身
 * 7.19点回家准备晚饭
 * 8.20点吃饭洗澡
 * 9.21点看书
 * 10.22点睡觉
 * @author 
*/
//闹钟
public class AlarmClock {
   protected static int count=1;
   protected static Calendar cal=Calendar.getInstance();
   /**
 * @param args
 */
public static void main(String[] args) {
	   //获取当前时间
	   Calendar cal=Calendar.getInstance();
	   //根据时间点执行
       if(count = =1){
 	       cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE),15, 29, 0);
	   }
	   Timer timer=new Timer();
	   //执行6点需要做的事
	   timer.schedule(new process(cal,timer),cal.getTime()); 
   }
}
//每天需要做的事情
class process extends TimerTask{
	//时
	int hour=15;
	//分
	int min=29;
	//秒
	int second=5;
	protected Calendar cal;
	protected Timer timer;
	public process(Calendar cal,Timer timer) {
		this.cal=cal;
		this.timer=timer;
	}
	public void run() {
		if(AlarmClock.count= =1){
			System.out.println("小明:6点起床跑步");
			setDate(AlarmClock.cal, hour, min, second);
			getExecute();
		}else if(AlarmClock.count= =2){
			System.out.println("小明:7点刷牙洗脸");
			setDate(AlarmClock.cal, hour, min, second+5);
			getExecute();
		}else if(AlarmClock.count= =3){
			System.out.println("小明:8点上班");
			setDate(AlarmClock.cal, hour, min, second+10);
			getExecute();
		}else if(AlarmClock.count= =4){
			System.out.println("小明:12点吃午饭");
			setDate(AlarmClock.cal, hour, min, second+15);
			getExecute();
		}else if(AlarmClock.count= =5){
			System.out.println("小明:17点下班");
			setDate(AlarmClock.cal, hour, min, second+20);
			getExecute();
		}else if(AlarmClock.count= =6){
			System.out.println("小明:18点健身");
			setDate(AlarmClock.cal, hour, min, second+25);
			getExecute();
		}else if(AlarmClock.count= =7){
			System.out.println("小明:19点回家准备晚饭");
			setDate(AlarmClock.cal, hour, min, second+30);
			getExecute();
		}else if(AlarmClock.count= =8){
			System.out.println("小明:20点吃饭洗澡");
			setDate(AlarmClock.cal, hour, min, second+35);
			getExecute();
		}else if(AlarmClock.count= =9){
			System.out.println("小明:21点看书");
			setDate(AlarmClock.cal, hour, min, second+40);
			getExecute();
		}else if(AlarmClock.count= =10){
			System.out.println("小明:22点睡觉");
			AlarmClock.count=1;
		    //日期加一
			AlarmClock.cal.set(Calendar.DATE, cal.get(Calendar.DATE)+1);
			setDate(AlarmClock.cal,6,0,0);
			timer.schedule(new process(cal,timer),AlarmClock.cal.getTime());
			timer.cancel();
			return;	
		}
		AlarmClock.count++;	
	}
	//设置执行时间
	public void setDate(Calendar cal,int hour,int min,int second){
		//设置小时
		cal.set(Calendar.HOUR_OF_DAY, hour);
		//设置分钟
		cal.set(Calendar.MINUTE, min);
		//设置秒
		cal.set(Calendar.SECOND, second);
	}
	//时间一到执行run方法
	public void getExecute(){
		timer.schedule(new process(cal,timer),AlarmClock.cal.getTime());
	}
}

效果图:这是一个gif图根据指定时间执行方法_第1张图片
撰写时间:2019-7-11
作者:拍氹

你可能感兴趣的:(java,MyEclipse)