วิธีหยุดงานที่กำหนดเวลาไว้ในคลาส java.util.Timer


93

ฉันกำลังใช้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
เป็นการดีหรือไม่ที่จะเพิ่ม timer.cancel () ในขั้นสุดท้ายตาม (หนังสือ Effetive Java)
Tushar Pandey

1
@ แจ็คกี้เป็นแนวทางปฏิบัติที่ดีที่จะมีทั้งสองอย่าง แต่ในทางทฤษฎีcancelก็ใช้ได้
Fritz H

10
@ แจ็คกี้พูดถูก ดูการใช้งาน Timer การโทรล้างหลังจากยกเลิกจะไม่มีประโยชน์อย่างแน่นอน ยกเลิกจะล้างรายการงานทั้งหมดในขณะที่การล้างซ้ำในรายการเดียวกันให้ตรวจสอบว่าสถานะเป็นยกเลิกหรือไม่จากนั้นจะลบงานออก
Boyan

2
ถ้ากิจกรรม / ส่วนที่เริ่มจับเวลาถูกทำลายหรือหยุดลง Timer ที่กำหนดเวลาไว้จะหยุดเองหรือไม่
ได้ทั้งหมด


28

คุณควรหยุดงานที่คุณกำหนดไว้ในตัวจับเวลา: ตัวจับเวลาของคุณ:

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

โปรดสังเกตว่าการยกเลิกตัวจับเวลาจะไม่ยุติการจับเวลาที่กำลังดำเนินอยู่


ฉันมีสองวิธีเป็นไปได้ไหมที่จะหยุด 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.