Tôi cần một số loại dịch vụ sẽ chạy một số nhiệm vụ cùng một lúc và trong khoảng thời gian 1 giây trong 1 phút.
Nếu một trong những nhiệm vụ thất bại, tôi muốn dừng dịch vụ và mọi nhiệm vụ chạy với nó với một loại chỉ báo nào đó đã xảy ra sự cố, nếu không, sau một phút mọi thứ sẽ ổn, dịch vụ sẽ dừng lại với một chỉ báo rằng tất cả đều ổn.
Ví dụ, tôi có 2 chức năng:
Runnable task1 = ()->{
int num = Math.rand(1,100);
if (num < 5){
throw new Exception("something went wrong with this task,terminate");
}
}
Runnable task2 = ()->{
int num = Math.rand(1,100)
return num < 50;
}
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
task1schedule = scheduledExecutorService.scheduleAtFixedRate(task1, 1, 60, TimeUnit.SECONDS);
task2schedule = scheduledExecutorService.scheduleAtFixedRate(task2, 1, 60, TimeUnit.SECONDS);
if (!task1schedule || !task2schedule) scheduledExecutorService.shutdown();
Bất kỳ ý tưởng về làm thế nào tôi nên giải quyết điều này và làm cho mọi thứ chung chung nhất có thể?
Math.rand
không phải là API tích hợp. Một thực hiệnRunnable
phải có mộtvoid run
định nghĩa. Loạitask1/2schedule
sẽScheduledFuture<?>
trong bối cảnh được cung cấp. Chuyển đến câu hỏi thực tế, làm thế nào để đi xung quanh để sử dụngawaitTermination
? Bạn có thể làm điều đó nhưscheduledExecutorService.awaitTermination(1,TimeUnit.MINUTES);
. Ngoài ra, về việc kiểm tra xem có bất kỳ tác vụ nào bị hủy trước khi hoàn thành bình thườngif (task1schedule.isCancelled() || task2schedule.isCancelled()) scheduledExecutorService.shutdown();
không?