Hiện tại tôi đang sử dụng bộ hẹn giờ để thực hiện một số chức năng mỗi khoảng thời gian. Tuy nhiên, sau này khi tôi muốn thay đổi khoảng thời gian thực thi hàm, tôi không thể hủy lịch biểu trước đó. làm thế nào điều này có thể được giải quyết? Cảm ơncách hủy lịch biểu hiện có của bộ hẹn giờ
Trả lời
Với phương thức timer.cancel()
, bạn có thể hủy Bộ hẹn giờ và tất cả các tác vụ đã lên lịch. (Xem API documentation) hoặc bạn có thể gọi hủy bỏ phương pháp trên TimerTask bạn timertask.cancel()
(xem API documentation)
Nếu bạn muốn thay đổi thời gian dự kiến, bạn nên hủy bỏ TimerTask và thêm một TimerTask mới.
TimerTask # cancel và sau đó Timer # purge() không hoạt động. Nó vẫn chạy. – JohnyTex
Bạn có thể xem xét sử dụng ScheduledThreadPoolExecutor thay vì Timer
.
Cách sử dụng khá thẳng về phía trước. Bạn tạo một thể hiện của một chấp hành viên:
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
Và sau đó khi bạn muốn thêm một nhiệm vụ bạn gọi:
executor.scheduleAtFixedRate(myRunnable, delay, interval, unit);
đâu myRunnable
là nhiệm vụ của bạn (mà thực hiện các Runnable
-interface), delay
là bao lâu trước khi nhiệm vụ được thực hiện lần đầu tiên, interval
là thời gian giữa việc thực hiện nhiệm vụ sau lần thực thi đầu tiên. delay
và interval
được đo lường dựa trên thông số unit
, có thể là TimeUnit. * (Trong đó * là SECONDS, MINUTES, MILLISECONDS, v.v ...).
Sau đó, để ngăn chặn việc thực hiện bạn gọi:
executor.shutdownNow();
Và sau đó bạn có thể gửi lại nhiệm vụ của bạn với một khoảng thời gian khác nhau.
Lưu ý: Bạn có thể cần phải tạo một phiên bản mới của trình thực thi trước khi gửi lại tác vụ của bạn, nhưng tôi không hoàn toàn chắc chắn lý do.
khác với hẹn giờ như thế nào? – njzk2
Liên kết này cho bạn biết một chút về sự khác biệt: http://www.dremsus.com/index.php/2011/03/why-scheduledthreadpoolexecutor-for-smartfoxserver-2x/ Ngoài ra câu hỏi này trên Stackoverflow adresses sự khác biệt: http: //stackoverflow.com/questions/409932/java-timer-vs-executorservice – kaspermoerch
là có anyway mà tôi không cần phải tắt các giám đốc điều hành hoặc đóng bộ đếm thời gian? Tôi không muốn tạo một thể hiện mới của đối tượng thi hành hoặc bộ đếm thời gian ... – user301
- 1. Kiểm tra xem Bộ hẹn giờ Java có bị hủy không
- 2. select() - bộ hẹn giờ có thể
- 3. Bộ hẹn giờ và javafx
- 4. Bộ hẹn giờ trong clojure?
- 5. Tạo Bộ hẹn giờ iOS
- 6. Bộ hẹn giờ trong Windows
- 7. Android - Kiểm soát tác vụ với Bộ hẹn giờ và Bộ hẹn giờ?
- 8. Khi một chuỗi gọi lệnh SetWaitableTimer thoát trong khi một chuỗi khác đang chờ trên bộ hẹn giờ, bộ hẹn giờ có bị hủy không?
- 9. Dịch vụ hẹn giờ trong ejb 3.1 - lịch biểu thời gian chờ gọi
- 10. thực hiện bộ hẹn giờ ngay sau khi bắt đầu?
- 11. Sử dụng Bộ hẹn giờ trong C#
- 12. _.delay() - làm mất bộ hẹn giờ
- 13. Bộ hẹn giờ nhanh, đa nền tảng?
- 14. cocos2d: Cách đặt hẹn giờ
- 15. Lập lịch công việc: EJB 3.1 Bộ hẹn giờ hoặc Quartz?
- 16. Dịch vụ Windows với bộ hẹn giờ
- 17. Cách tốt nhất để thực hiện "hẹn giờ" là gì?
- 18. Android khởi chạy lại Bộ hẹn giờ sau khi chúng bị hủy
- 19. hiển thị bộ hẹn giờ trong nhãn
- 20. DispatcherTimer vs Bộ hẹn giờ bình thường trong ứng dụng WPF cho công cụ lên lịch
- 21. So sánh Bộ hẹn giờ với DispatcherTimer
- 22. Đang đợi Bộ hẹn giờ kết thúc bằng Java
- 23. C# 5 và bộ hẹn giờ không đồng bộ
- 24. Làm cách nào để tạo bộ hẹn giờ trong WPF?
- 25. cách sử dụng Bộ hẹn giờ trong C#
- 26. vòng hẹn giờ javascript
- 27. Cách triển khai bộ hẹn giờ trong C trên windows
- 28. Dừng hẹn giờ khi tắt máy tomcat
- 29. Đồng bộ hóa bộ hẹn giờ để ngăn chồng chéo
- 30. Rò rỉ bộ nhớ xung quanh hẹn giờ ủy nhiệm
ý của bạn là "tôi không thể hủy lịch trước đó"? bạn không biết làm thế nào để làm điều đó, hoặc là nó không phù hợp với kiến trúc của bạn? – njzk2
Tôi muốn hủy lịch trước đó và bắt đầu lịch biểu mới với khoảng thời gian khác nhau. Tuy nhiên, đối với bộ đếm thời gian, có vẻ như không có cách nào để làm điều này .. cũng bực bội – user301
bạn phải thực sự hủy bỏ bộ hẹn giờ và tạo lại một – njzk2