Tôi tìm thấy những câu hỏi tương tự được hỏi ở đây nhưng không có câu trả lời cho sự hài lòng của tôi. Vì vậy, nói lại câu hỏi một lần nữa-
Tôi có một nhiệm vụ cần được thực hiện theo định kỳ (giả sử khoảng thời gian 1 phút). Lợi thế của việc sử dụng Timertask & Timer để làm điều này thay vì tạo một luồng mới có vòng lặp vô hạn với chế độ ngủ là gì?
Đoạn mã sử dụng timertask-
TimerTask uploadCheckerTimerTask = new TimerTask(){
public void run() {
NewUploadServer.getInstance().checkAndUploadFiles();
}
};
Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000);
Đoạn mã sử dụng Chủ đề và giấc ngủ-
Thread t = new Thread(){
public void run() {
while(true) {
NewUploadServer.getInstance().checkAndUploadFiles();
Thread.sleep(60 * 1000);
}
}
};
t.start();
Tôi thực sự không phải lo lắng nếu tôi bỏ lỡ các chu kỳ nhất định nếu việc thực thi logic mất nhiều hơn khoảng thời gian.
Hãy bình luận về điều này ..
Cập nhật:
Gần đây tôi đã tìm thấy một sự khác biệt khác giữa việc sử dụng Timer so với Thread.sleep (). Giả sử giờ hệ thống hiện tại là 11:00 sáng. Nếu chúng tôi lùi thời gian hệ thống về 10:00 AM vì lý do nào đó, Bộ hẹn giờ sẽ NGỪNG thực thi tác vụ cho đến khi nó đạt đến 11:00 sáng, trong khi phương thức Thread.sleep () sẽ tiếp tục thực hiện tác vụ mà không gặp trở ngại. Đây có thể là người đưa ra quyết định chính trong việc quyết định sử dụng cái gì giữa hai cái này.