在使用java.util.Timer和java.util.TimerTask执行定时任务时,如果在调用Timer的schedule或scheduleAtFixedRate方法时,报错如下:
java.lang.IllegalStateException: Task already scheduled or cancelled
说明当前Timer对象已经执行结束或被取消了,通常情况下是执行过Timer或TimerTask的cancel()接口,当前的Timer和TimerTask已经被消耗了,不能继续使用。如果要继续使用,需要重新创建对象,例如:
/**
* 开始计时器
*/
private void startTimer() {
this.stopTimer();
this.timer = new Timer();
this.task = new TimerTask() {
@Override
public void run() {
// 代码逻辑
}
};
// 每隔1秒执行一次task
this.timer.schedule(this.task, 0, 1000);
}
/**
* 结束计时器
*/
private void stopTimer() {
if (this.timer != null) {
this.timer.cancel();
}
}