如何判断java.util.Timer是否正在运行

时间:2016-11-02 03:16:46

标签: java android timer

我编写了自己的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

感谢您的帮助。

1 个答案:

答案 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