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