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?

¿Fue útil?

Solución

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.");
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top