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.randkhông phải là API tích hợp. Một thực hiệnRunnablephải có mộtvoid runđịnh nghĩa. Loạitask1/2schedulesẽ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?