Timer和TimerTask的使用

Timer可以定时执行TimerTask任务,使用起来也十分的方便。

以下的代码是输出当前时间的TimerTask

//输出当前时间的任务
private static TimerTask task=new TimerTask(){
	@Override
	public void run() {
		System.out.println(getCurrentTime());
	}		
};

以下代码是使用Timer执行TimerTask

//Timer定时执行TimerTask任务
Timer timer=new Timer();
timer.schedule(task, date, period);

使用TimerTask执行的时候没有暂停和恢复,结束之后就没办法再次执行了。

以下代码使用栈保存当前的任务实现暂停和恢复的功能。

命令接口

public interface MyTimerI {
	
	public void start();
	
	public void stop();
	
	public void pause();
	
	public void resume();

}

实现命令接口

public class MyTimerImpl implements MyTimerI{
	
	private MyTimerTask task;
	private int date;
	private long period;
	private Stack<MyTimerTask> taskStack;
	private Timer timer;
	
	public MyTimerImpl(TimerTask timerTask,int date,int period){
		task=new MyTimerTask(timerTask);
		this.date=date;
		this.period=period;
		timer=new Timer();
		taskStack=new Stack<MyTimerTask>();
	}

	@Override
	public void start() {
		timer.schedule(task, date, period);
	}

	@Override
	public void stop() {
		timer.cancel();
	}

	@Override
	public void pause() {
		//使用栈保存当前的任务
		taskStack.push(new MyTimerTask(task.getCurrentTask()));
		task.cancel();
	}

	@Override
	public void resume() {
		//出栈,恢复保存的任务
		task=taskStack.pop();
		timer.schedule(task, 0, period);
	}
	
    private class MyTimerTask extends TimerTask{
		
		private TimerTask task;

		public MyTimerTask(TimerTask task){
			this.task=task;
		}
		
		@Override
		public void run() {
			task.run();
		}
		
		public TimerTask getCurrentTask(){
			return task;
		}
		
	}

}

使用方法

	public static void main(String args[]){
		
		//每隔1秒钟执行一次,不等待
		MyTimerI timer = new MyTimerImpl(task,0,1000);
		
		timer.start();
		
		timer.pause();
		
		timer.resume();
		
		timer.stop();
	}
posted @ 2016-09-13 19:07  黄大仙爱编程  阅读(814)  评论(0编辑  收藏  举报