首页 > 代码库 > Timer和TimerTask的使用

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();	}

Timer和TimerTask的使用