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.");
}
Como começou como iniciar o início de um ScheduledExecutorService?
-
29-07-2022 - |
Pergunta
Descrição
Uma tarefa A está em execução, que pode durar de 2s a 60+s.
Enquanto A está em execução, eu agendava um executores de que após 10s (atraso) imprimiria "executando" a cada 5s (taxa fixa).
ScheduledExecutorService scheduleNotifications = Executors
.newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("A is running");
}
}, 10, 5, TimeUnit.SECONDS);
Depois que A é feito, desejo imprimir "A está pronto". mas somente se minha tarefa agendada de excesso de serviço, o que significa que ele imprimiu "Running" pelo menos uma vez.
- Se terminar antes dos 10s, não imprimi nada.
- Se A toma mais de 10s, imprimirá "Running" a cada 5s e depois "feito" quando A terminar.
Como eu poderia fazer isso sem usar uma bandeira booleana dentro do schduled runnable
. Existe uma maneira de verificar se meu serviço começou?
Solução
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow