Bagaimana menghentikan tugas yang dijadwalkan di kelas java.util.Timer


92

Saya menggunakan java.util.Timerkelas dan saya menggunakan metode jadwal untuk melakukan beberapa tugas, tetapi setelah menjalankannya selama 6 kali saya harus menghentikan tugasnya.

Bagaimana saya harus melakukan itu?

Jawaban:


141

Simpan referensi ke pengatur waktu di suatu tempat, dan gunakan:

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

untuk menghentikan apa pun yang dilakukannya. Anda dapat memasukkan kode ini ke dalam tugas yang Anda lakukan dengan a static intuntuk menghitung berapa kali Anda berkeliling, mis

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

     ... perform task here ....

}

10
Saya pikir pembatalan sudah cukup, tidak perlu pembersihan
LiangWang

1
apakah baik untuk menambahkan timer.cancel () di final menurut (Buku Java Efetif)
Tushar Pandey

1
@Jacky adalah praktik yang baik untuk memiliki keduanya, tetapi secara teoritis cancelitu sendiri akan berhasil.
Fritz H

10
@Jacky benar. Lihatlah implementasi Timer. Memanggil pembersihan setelah pembatalan sama sekali tidak berguna. Batal membersihkan seluruh daftar tugas, sementara pembersihan mengulangi daftar yang sama, memeriksa apakah status DIBATALKAN lalu menghapus tugas.
Boyan

2
jika aktivitas / fragmen yang memulai Pewaktu dihancurkan atau dihentikan, apakah Pewaktu yang dijadwalkan berhenti dengan sendirinya?
aLL


28

Anda harus menghentikan tugas yang telah Anda jadwalkan pada timer: Timer Anda:

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

Untuk menghentikan:

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

Perhatikan bahwa hanya membatalkan timer tidak akan menghentikan timertas yang sedang berlangsung.


Saya mengalami dua metode. Apakah mungkin untuk menghentikan TimerTask dari metode yang berbeda?
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

Hentikan Pewaktu sekali setelah bangun pada waktu tertentu dalam milidetik.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.