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?

om.
sumber

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 ....

}
Fritz H.
sumber
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
55

Entah panggilan cancel()padaTimer jika semua itu dilakukan, atau cancel()padaTimerTask jika timer itu sendiri memiliki tugas-tugas lain yang Anda ingin melanjutkan.

Jon Skeet
sumber
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.

Vering
sumber
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.
Abhi
sumber
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);
Ajay Kumar
sumber