ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1);
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("A is running");
}
}, 10, 5, TimeUnit.SECONDS);
Thread.sleep(20000);
scheduler.shutdown();
if (scheduler.getCompletedTaskCount() > 0) {
System.out.println("A is done.");
}
¿Cómo ha comenzado una verificación de un ProgramedExecutorService?
-
29-07-2022 - |
Pregunta
Descripción
Se está ejecutando una tarea A, que puede durar de 2S a 60+s.
Mientras A se está ejecutando, programé un servicio de ejecutores de que después de 10 (retraso) imprimiría "ejecutando" cada 5s (tasa fija).
ScheduledExecutorService scheduleNotifications = Executors
.newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("A is running");
}
}, 10, 5, TimeUnit.SECONDS);
Una vez terminado A, deseo imprimir "A está hecho". Pero solo si mi tarea de servicio de servicio de programación ha comenzado, lo que significa que imprimió "ejecutando" al menos una vez.
- Si se terminó antes de 10, no imprimo nada.
- Si A toma más de 10, imprimo "ejecutando" cada 5s y luego "hecho" una vez que A está terminado.
¿Cómo podría hacer eso sin usar una bandera booleana dentro del Schduled runnable
. ¿Hay alguna manera de verificar que comenzó mi servicio?
Solución
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow