ScheduledExecutorService: quand shutdown devrait être appelé?
- Je utiliser ScheduledExecutorService dans mon application. J'ai besoin de l'utiliser de temps en temps dans certaines classe Utilitaire pour exécuter prévue threads.
Est-il un bon design pour contenir ScheduledExecutorService dans un champ statique? Est-ce nécessaire d'invoquer ScheduledExecutorService.shutdown() dans ce cas? Quel est le risque si je ne suis pas d'invoquer l'arrêt?
C'est ce que j'ai pensé à faire:
private static ScheduledExecutorService exec = Executors.newScheduledThreadPool(5);
public void scheduleTask(String name) {
Future<?> future = futuresMapping.get(name);
if(future!=null && !future.isDone())
future.cancel(true);
//execute once
Future<?> f = scheduledExecutor.schedule(new MyTask()), 1, TimeUnit.MINUTES);
futuresMapping.put(name, f);
}
Merci
source d'informationauteur lili
Vous devez vous connecter pour publier un commentaire.
Vous devriez toujours invoquer l'arrêt() ou shutdownNow(). Si vous ne le faites pas, votre demande pourrait ne jamais mettre fin à tant que il ya encore des threads actifs (selon la façon dont vous êtes à la résiliation de votre application, si c'est dans la gestion de l'environnement ou pas, etc.).
Habituellement, vous devez appeler l'arrêt() à partir d'un type d'événement de cycle de vie de la méthode, comme le Printemps DisposableBean.destroy(), ou si vous n'utilisez pas n'importe quel cadre il vous suffit d'appeler avant de quitter votre application.
Efficace Java 2nd Ed dit: