Tôi đã là một nhiệm vụ theo lịch trình (chạy trong thi công chậm trễ cố định), bắt đầu như thế này:Cách chính xác để khởi động lại tác vụ theo lịch ScheduledExecutorService là gì?
executoreService.scheduleWithFixedDelay(repeatingThread, 0, numOfSeconds, TimeUnit.SECONDS);
Trên mỗi đầu của chu kỳ, tôi kiểm tra cho một sự thay đổi trong một tập tin cài đặt, và sau đó tôi muốn khởi động lại nhiệm vụ . Tệp cài đặt cũng chứa khoảng thời gian (numOfSeconds
trong mã ở trên).
Hiện nay, tôi đang sử dụng đoạn mã sau để khởi động lại nhiệm vụ:
executoreService.shutdownNow();
try {
while(!executoreService.awaitTermination(5, TimeUnit.SECONDS)){
logger.debug("awaiting termintation");
}
} catch (InterruptedException e) {
logger.debug("interrupted, continuing", e);
}
// initialize startup parameters
init();
// start the main scheduled timer
executoreService.scheduleWithFixedDelay(repeatingThread, 0, numOfSeconds, TimeUnit.SECONDS);
Tôi không chắc chắn về những cuộc gọi API. Cách được khuyến nghị để khởi động lại tác vụ (có thể với sự chậm trễ mới) là gì?
Đó là điều cần xem xét, nhưng việc triển khai nội dung nào đó sẽ bao gồm mọi thay đổi cài đặt sẽ dễ dàng hơn. tức là, bất kỳ thay đổi nào trong tệp cài đặt * cũng có thể * cũng thay đổi độ trễ. Vì vậy, thay vì kiểm tra xem sự chậm trễ đã được thay đổi và sau đó làm một điều, và nếu nó không phải là sau đó cái gì khác, sau đó tôi chỉ muốn khởi động lại trong mọi trường hợp. – Ovesh