몇 가지 작업을 동시에 1 분 간격으로 1 초 간격으로 실행하는 서비스가 필요합니다.
작업 중 하나가 실패하면 서비스와 서비스와 함께 실행 된 모든 작업에 문제가 있음을 나타내는 표시가 있습니다 .1 분 후에 모든 것이 잘되면 모든 것이 잘되었다는 표시와 함께 서비스가 중지됩니다.
예를 들어, 나는 두 가지 기능을 가지고 있습니다 :
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();
이 문제를 어떻게 해결하고 가능한 한 일반적인 것을 만들어야하는지에 대한 아이디어가 있습니까?
1 분마다 반복되는 작업을 예약하는 것은 의미가 없지만 "1 분 후에 모든 것이 제대로 진행된 경우"작업을 중지하려고합니다. 두 경우 모두 실행 프로그램을 중지하기 때문에 1 분 후에 실행 프로그램을 종료하는 작업을 예약하는 것은 쉽지 않습니다. 그리고 선물은 이미 무언가 잘못되었는지 여부를 나타냅니다. 다른 유형의 지표를 원한다고 말하지 않았습니다.
—
Holger
Math.rand
로 내장 API는 아닙니다. 의 구현Runnable
에는void run
정의 가 있어야합니다 . 제공된 컨텍스트에 유형task1/2schedule
이 있습니다ScheduledFuture<?>
. 실제 질문으로 이동하면 어떻게 사용awaitTermination
합니까? 당신은 그렇게 할 수 있습니다scheduledExecutorService.awaitTermination(1,TimeUnit.MINUTES);
. 또는 정상적인 완료 전에 취소 된 작업이 있는지 확인하는 방법은 무엇if (task1schedule.isCancelled() || task2schedule.isCancelled()) scheduledExecutorService.shutdown();
입니까?