我编写了自己的Timer
类,它会触发TimerTask
的单次执行。在我的单例定时器中,有private boolean isRunning
。如果isRunning==true
,则其他线程不会触发定时器。
public class DBconnectDelayTimer extends Timer {
/**
* Indicates if the Timer is running
*/
private boolean isRunning;
public DBconnectDelayTimer() {
super();
isRunning = false;
}
@Override
public void schedule(TimerTask task, long delay)
isRunning = true;
super.schedule(task, delay);
}
public boolean isRunning() {
return isRunning;
}
}
我的问题是,我应该在哪种方法中将isRunning
设置回false
?
感谢您的帮助。
答案 0 :(得分:0)
一个天真的解决方案是将任务参数包装在另一个完成时重置isRunning
的任务中:
@Override
public void schedule(TimerTask task, long delay) {
isRunning = true;
super.schedule(new TimerTask() {
@Override
public void run() {
task.run();
isRunning = false;
}
}, delay);
}
请注意,这仅在一次只安排一个任务的情况下才有效,如果没有正确同步,很难执行。如果单个任务被安排两次,它还会使Timer
承诺抛出IllegalStateException
。