[英]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.