ฉันต้องการบริการบางประเภทที่จะทำงานสองสามอย่างพร้อมกันและในช่วงเวลา 1 วินาทีเป็นเวลา 1 นาที
หากงานใดงานหนึ่งล้มเหลวฉันต้องการหยุดบริการและงานทุกอย่างที่วิ่งไปพร้อมกับตัวบ่งชี้บางอย่างที่มีบางอย่างผิดปกติมิฉะนั้นหากหลังจากผ่านไปหนึ่งนาทีทุกอย่างไปได้ดีบริการจะหยุดทำงานโดยมีตัวบ่งชี้ว่า
ตัวอย่างเช่นฉันมี 2 ฟังก์ชั่น:
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();
ความคิดเห็นใด ๆ เกี่ยวกับฉันควรจัดการสิ่งนี้อย่างไรและทำให้สิ่งต่าง ๆ เป็นเรื่องธรรมดาที่สุด
Math.rand
ไม่ใช่ API ในตัว การดำเนินการของRunnable
ต้องมีvoid run
คำจำกัดความ ประเภทของtask1/2schedule
จะอยู่ScheduledFuture<?>
ในบริบทที่ให้ไว้ การย้ายไปยังคำถามจริงจะนำไปใช้ให้เกิดประโยชน์ได้awaitTermination
อย่างไร คุณสามารถทำเช่นscheduledExecutorService.awaitTermination(1,TimeUnit.MINUTES);
นั้นได้ อีกวิธีหนึ่งคือการตรวจสอบว่างานใด ๆ ที่ถูกยกเลิกก่อนที่จะเสร็จสมบูรณ์ตามปกติ:if (task1schedule.isCancelled() || task2schedule.isCancelled()) scheduledExecutorService.shutdown();
?