Java.util.Timerクラスでスケジュールされたタスクを停止する方法


91

私はjava.util.timerクラスを使用しており、そのスケジュールメソッドを使用していくつかのタスクを実行していますが、6回実行した後、そのタスクを停止する必要があります。

どうすればよいですか?

回答:


141

タイマーへの参照をどこかに保持し、次を使用します。

timer.cancel();
timer.purge();

何をしているのをやめるために。このコードをa static intを使用して実行しているタスク内に配置し、移動した回数をカウントできます。たとえば、

private static int count = 0;
public static void run() {
     count++;
     if (count >= 6) {
         timer.cancel();
         timer.purge();
         return;
     }

     ... perform task here ....

}

10
キャンセルで十分だと思います。パージする必要はありません
LiangWang

1
(Effetive Javaの本)に従ってfinalにtimer.cancel()を追加するのは良いことですか
Tushar Pandey

1
@Jacky両方を用意するのは良い習慣ですが、理論的にはcancelそれ自体が機能します。
Fritz H

10
@ジャッキーは正しいです。タイマーの実装を見てください。キャンセル後にパージを呼び出してもまったく役に立ちません。キャンセルはタスクリスト全体をクリアしますが、パージは同じリストを繰り返し処理し、ステータスがCANCELEDであるかどうかを確認してからタスクを削除します。
ボヤン

2
タイマーを開始したアクティビティ/フラグメントが破棄または停止された場合、スケジュールされたタイマーはそれ自体で停止しますか?
すべて


27

タイマーでスケジュールしたタスクを停止する必要があります:タイマー:

Timer t = new Timer();
TimerTask tt = new TimerTask() {
    @Override
    public void run() {
        //do something
    };
}
t.schedule(tt,1000,1000);

停止するには:

tt.cancel();
t.cancel(); //In order to gracefully terminate the timer thread

タイマーをキャンセルしただけでは、進行中のタイマータスクは終了しないことに注意してください。


2つのメソッドがありますが、別のメソッドからTimerTaskを停止することはできますか?
Sachin HR

16
timer.cancel();  //Terminates this timer,discarding any currently scheduled tasks.

timer.purge();   // Removes all cancelled tasks from this timer's task queue.

1

ミリ秒単位の特定の時間に起動したら、タイマーを一度終了します。

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.