繁体   English   中英

如何确定java.util.Timer是否正在运行

[英]How to decide if java.util.Timer is running

我编写了自己的Timer类,它触发了TimerTask的单次执行。 在我的单例Timer中 ,有一个private boolean isRunning 如果isRunning==true ,则其他线程不会触发Timer。

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

感谢您的任何帮助。

一个幼稚的解决方案是将task参数包装到另一个在完成时重置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的承诺。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM