Timer和TimerTask的使用

来源:互联网 发布:爱古筝软件 编辑:程序博客网 时间:2024/04/28 14:32

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

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

//输出当前时间的任务private static TimerTask task=new TimerTask(){@Overridepublic 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>();}@Overridepublic void start() {timer.schedule(task, date, period);}@Overridepublic void stop() {timer.cancel();}@Overridepublic void pause() {//使用栈保存当前的任务taskStack.push(new MyTimerTask(task.getCurrentTask()));task.cancel();}@Overridepublic 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;}@Overridepublic 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();}
0 0