2010-10-29 42 views
5

Tôi đã thử mọi thứ. Cái này quá How to stop the task scheduled in Java.util.Timer classCách dừng ngay lập tức nhiệm vụ được lên lịch trong lớp Java.util.Timer

Tôi có một nhiệm vụ mà thực hiện java.util.TimerTask

tôi gọi nhiệm vụ đó bằng 2 cách:

  1. tôi lên lịch hẹn giờ như thế này:

    hẹn giờ. lịch trình (timerTask, 60 * 1000);

  2. đôi khi tôi cần làm việc đó để bắt đầu ngay lập tức và nó phải hủy TimerTask nếu có bất kỳ đó là làm việc

    cancelCurrentWork(); timer.schedule (timerTask, 0);

thực hiện này không chỉ dừng lại công việc hiện tại: (tài liệu nói: Nếu nhiệm vụ đang chạy khi cuộc gọi này xảy ra, các nhiệm vụ sẽ chạy đến khi kết thúc, nhưng sẽ không bao giờ chạy lại)

Nhưng tôi cần nó để dừng lại.

public static void cancelCurrentwork() { 
if (timerTask!= null) { 
    timerTask.cancel(); 
} 
} 

Việc triển khai này chỉ hủy bỏ bộ hẹn giờ nhưng hiện đang thực hiện nhiệm vụ hoàn thành.

public static void cancelCurrentwork() { 
if (timer!= null) { 
    timer.cancel(); 
} 
} 

Có cách nào trong bộ đếm thời gian để STOP thực hiện taks hiện tại, giống như Thread.kill() hay gì đó không? Khi tôi cần nhiệm vụ đó để dừng tôi muốn nó mất tất cả dữ liệu của nó.

Trả lời

5

Không có cách nào để Bộ hẹn giờ dừng tác vụ trong các tuyến đường của nó.

Bạn sẽ cần có một cơ chế riêng trong chính tác vụ đang chạy, kiểm tra xem nó có tiếp tục chạy hay không. Ví dụ, bạn có thể có biến số AtomicBoolean keepRunning mà bạn đặt thành false khi bạn muốn tác vụ chấm dứt.

+0

Và cách dừng công việc từ bên trong Tác vụ? Tôi có thể kiểm tra với boolean, nhưng phương pháp tôi nên gọi sau đó? this.cancel()? – vale4674

+1

Và câu hỏi khác: có bất kỳ API nào giống như ScheduledExecutorService hay một cái gì đó như thế cho phép bạn STOP tác vụ không? – vale4674

+0

Không, bạn chỉ cần trả về từ phương thức 'run'. – aioobe

0

nếu bộ hẹn giờ của bạn đang sử dụng một số loại tệp/ổ cắm, bạn có thể đóng đối tượng đó từ bên ngoài bộ hẹn giờ và tác vụ hẹn giờ sẽ ném ngoại lệ và bạn có thể sử dụng nó để ngừng hẹn giờ.

nhưng nói chung bạn cần một số loại thuốc độc để ngăn chặn thành công một chuỗi/bộ hẹn giờ riêng biệt.

+0

vâng, nhưng đó là điều. Không có cách nào để ngăn chặn nó ngay lập tức và tôi thực sự không hiểu làm thế nào là có thể. – vale4674

+0

anyways tôi đã sử dụng gợi ý đó từ aioobe, và tôi kiểm tra liên tục lá cờ của tôi và sau đó trở về từ "chạy" phương pháp. – vale4674

Các vấn đề liên quan