Saya memerlukan beberapa jenis layanan yang akan menjalankan beberapa tugas secara bersamaan dan dalam interval 1 detik selama 1 menit.
Jika salah satu tugas gagal, saya ingin menghentikan layanan dan setiap tugas yang berjalan dengannya dengan semacam indikator bahwa ada sesuatu yang salah, jika tidak, setelah satu menit semuanya berjalan dengan baik, layanan akan berhenti dengan indikator bahwa semua berjalan dengan baik.
Sebagai contoh, saya memiliki 2 fungsi:
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();
Ada ide tentang bagaimana saya harus mengatasi ini dan membuat hal-hal yang sama generik mungkin?
Math.rand
bukan API bawaan. Suatu implementasiRunnable
harus memilikivoid run
definisi. Jenistask1/2schedule
akan beradaScheduledFuture<?>
dalam konteks yang disediakan. Pindah ke pertanyaan aktual, bagaimana cara memanfaatkannyaawaitTermination
? Anda bisa melakukannya sebagaischeduledExecutorService.awaitTermination(1,TimeUnit.MINUTES);
. Atau, bagaimana dengan memeriksa jika salah satu tugas harus dibatalkan sebelum selesai normal:if (task1schedule.isCancelled() || task2schedule.isCancelled()) scheduledExecutorService.shutdown();
?