2017-10-31 26 views
1

TimerTaskオブジェクトのrunメソッドでは、timerTask自体を別のTimerに送信する方法を教えてください。 timerTaskが実行されているとき、私は裁判官が何らかの作業を行うことができるかどうかを判断する必要があります。条件を満たしていない場合は、キャンセルして別のタイマーに入れてください。私のTimerTaskをの コードは次のようである:実行中のTimerTaskを別のTimerに送信する方法

@Override 
public void run() { 
    try { 
     if (flag) { 
      // do something 
     } else { 
      new Timer().schedule(this, 1000 * 60); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

それは動作しますか?

あなただけ ThreadRunnableまたは別の Timerから例えば、1 Timerを使用して、外部からの状態を監視する必要があります
+1

いくつかのコードを投稿すると便利です – Kovalainen

+0

「Timer」を1つだけ使用してから、「Thread」、「Runnable」または別の「Timer」などの外部から条件を監視する必要があります。次に、必要に応じて外部モニタからタイマーを停止、キャンセル、再割り当て、開始します。 – Zabuza

答えて

1

。次に、必要に応じて外部モニタからタイマーを停止、キャンセル、再割り当て、開始します。


はここTimerTaskです:

public Monitor implements Runnable() { 
    private Timer mTimerToMonitor; 

    public Monitor(Timer timerToMonitor) { 
     this.mTimerToMonitor = timerToMonitor; 
    } 

    @Override 
    public void run() { 
     while (true) { 
      if (!flag) { 
       // Cancel the timer and start a new 
       this.mTimerToMonitor.cancel(); 
       this.mTimerToMonitor = new Timer(); 
       this.mTimerToMonitor.schedule(...); 
      } 

      // Wait a second 
      Thread.sleep(1000); 
     } 
    } 
} 

注実際にあなたのMonitorも外部からキャンセル得ることができる必要がありますことを、現在それは無限に実行されます。

public class OurTask extends TimerTask { 
    @Override 
    public void run() { 
     // Do something 
    } 
} 

そしてここでは、モニターがあります。

そしてこれは、あなたがそれを呼び出すことができる方法である:

Timer timer = new Timer(); 
timer.schedule(new OurTask(), ...); 

Thread monitorThread = new Thread(new Monitor(timer)); 
monitorThread.start(); 

はまた、代わりにRunnableTimerThreadを使用することが新しいのJava 8ものに見てみる価値があるかもしれないことに注意してください特にインターフェイスFutureとそれを実装するクラス。

関連する問題