您的位置:首页 > 其它

Timer和TimerTask的使用

2016-09-13 19:05 375 查看
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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: