2016-11-02 5 views
0

Timerクラスを作成します。このクラスはTimerTaskを1回実行します。私のシングルトンタイマーには、private boolean isRunningがあります。 isRunning==trueの場合、他のスレッドはタイマーを起動しません。java.util.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; 
    } 
} 

私の質問は、私は戻ってfalseからisRunningを設定すべき方法では、ありますか?

ありがとうございました。

答えて

0

一つの素朴な解決策が完了した時点でisRunningをリセットし、別のタスクにタスクの引数をラップすることです:1個以下のタスクをすることは困難である、時間に予定されている場合にのみ動作することを

@Override 
public void schedule(TimerTask task, long delay) { 
    isRunning = true; 
    super.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      task.run(); 
      isRunning = false; 
     } 
    }, delay); 
} 

は注意適切な同期を取らずに実施する。また、Timerは、単一のタスクが2回スケジュールされている場合にIllegalStateExceptionを投げることを約束しています。

+0

入手しました。あなたの "ありがとう"をありがとう。 – Rangtian

関連する問題