J'interroge une API pour créer un rapport et je souhaite charger ce rapport 5 minutes plus tard. Je veux utiliser un ScheduledExecutorService
pour cela. Comme je ne veux pas que l'Executor bloque mon fil, je crée un nouveau fil pour cela, mais je ne sais pas si c'est la bonne façon de le faire. Voici mon code:Exécution du programme dans un nouveau fil de discussion
Thread thread = new Thread() {
public void run() {
log.info("Starting...");
new RequestReport().runScheduledTask(requestId);
}
};
thread.start();
private void runScheduledTask(String requestId) {
log.info("Starting five-minute countdown now...");
ScheduledFuture<?> countdown = scheduler.schedule(() -> {
try {
new GetReportList().run(requestId);
} catch (Exception e) {
e.printStackTrace();
}
}, 5, TimeUnit.MINUTES);
try {
countdown.get();
} catch (InterruptedException | ExecutionException e) {
log.info("catched Exception");
e.printStackTrace();
}
scheduler.shutdown();
}
Y at-il une meilleure façon d'exécuter une fonction 5 minutes après l'autre? Est-ce que c'est comme ça que je fais ça? Que devrais-je changer?
BTW, j'utilise le printemps - y a-t-il quelque chose qui pourrait améliorer cela?
Si vous utilisez Spring, vous pouvez également utiliser '@ Scheduled' [annotation] (https://spring.io/guides/gs/scheduling-tasks/) pour planifier une invocation de méthode. –
Mais que puis-je faire de façon dynamique? Je dois exécuter la tâche cinq minutes après l'autre - l'heure d'exécution n'est pas connue au démarrage du programme. @SurajBajaj –
@ J.Doe Votre boucle while (! Countdown.isDone()) {} 'est une très mauvaise idée. – Kayaman