J'essaie de planifier une tâche qui nécessite ~ 2,25 sec à exécuter toutes les secondes. Ainsi, je sais que 3 threads devraient suffire à gérer la charge. Mon code ressemble à ceci:Comment planifier une tâche à taux fixe avec une durée plus longue que le taux?
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(4);
scheduler.scheduleAtFixedRate(new Streamer(), 0, 1000, TimeUnit.MILLISECONDS);
Fait intéressant, cette scheduledAtFixedDelay se comporte comme avec un retard de 0 (fils terminer tous les ~ 2,25 s).
Je sais que scheduleAtFixedRate peut être en retard si un thread s'exécute en retard. Mais ne devrait pas donner à l'exécuteur un plus grand pool de threads pour résoudre ce problème?
Je pourrais facilement contourner le problème en codant 3 exécuteurs toutes les 3 secondes, mais cela rendrait l'administration inutilement difficile.
Y at-il une solution plus facile à ce problème?
Aussi une solution valide. Attention, si vous avez un temps d'exécution> 3 secondes ici (un coup d'œil singulier peut-être) vous pouvez vous retrouver avec plus de 3 Tâches simultanées (étant donné qu'il y a plus de 3 Threads dans le pool disponible). – Fildor
Pro Tipp: Incorporez certaines mesures et consignation de celles-ci pour attirer l'attention lorsque les tâches commencent à s'exécuter plus longtemps que prévu/souhaité. – Fildor