簡體   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