Cách dừng tác vụ đã lên lịch trong lớp Java.util.Timer


91

Tôi đang sử dụng java.util.timerlớp và tôi đang sử dụng phương thức lịch biểu của nó để thực hiện một số tác vụ, nhưng sau khi thực hiện nó 6 lần, tôi phải dừng tác vụ của nó.

Tôi nên làm điều đó như thế nào?

Câu trả lời:


141

Giữ một tham chiếu đến bộ đếm thời gian ở đâu đó và sử dụng:

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

để dừng bất cứ điều gì nó đang làm. Bạn có thể đặt mã này bên trong tác vụ mà bạn đang thực hiện với một static intđể đếm số lần bạn đã thực hiện, ví dụ:

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

     ... perform task here ....

}

10
Tôi nghĩ hủy bỏ là đủ, không cần phải thanh trừng
LiangWang

1
có tốt không để thêm timer.cancel () vào cuối cùng theo (Sách Java nỗ lực)
Tushar Pandey

1
@Jacky, thực hành tốt là có cả hai, nhưng về mặt lý thuyết, cancelbản thân nó sẽ hoạt động.
Fritz H

10
@Jacky nói đúng. Nhìn vào việc thực hiện Timer. Gọi thanh lọc sau khi hủy bỏ là hoàn toàn vô ích. Hủy bỏ xóa toàn bộ danh sách nhiệm vụ, trong khi quá trình thanh lọc lặp lại trên cùng một danh sách, kiểm tra xem trạng thái có bị HỦY KHÔNG và sau đó xóa nhiệm vụ.
Boyan

2
nếu hoạt động / phân đoạn bắt đầu Bộ hẹn giờ bị phá hủy hoặc dừng lại, Bộ hẹn giờ có tự dừng không?
aLL


27

Bạn nên dừng tác vụ mà bạn đã lên lịch trên bộ hẹn giờ:

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

Để ngăn chặn:

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

Lưu ý rằng chỉ hủy bộ đếm thời gian sẽ không chấm dứt các bộ đếm thời gian đang diễn ra.


Tôi đang gặp hai phương pháp. Có thể dừng TimerTask từ phương pháp khác không?
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

Kết thúc Bộ hẹn giờ một lần sau khi thức dậy tại một thời điểm cụ thể tính bằng mili giây.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.