2016-12-21 2 views
2

J'ai trois tâches indépendantes à exécuter toutes les 1 minute. Ici, j'ai développé deux options.Comment planifier plusieurs tâches avec ExecutorService

Option1

 ScheduledExecutorService service1 = Executors.newScheduledThreadPool(1); 
     ScheduledExecutorService service2 = Executors.newScheduledThreadPool(1); 
     ScheduledExecutorService service2 = Executors.newScheduledThreadPool(1); 
     service1.scheduleAtFixedRate(new task1(), 0, 60, TimeUnit.SECONDS); 
     service2.scheduleAtFixedRate(new task2(), 0, 60, TimeUnit.SECONDS); 
     service3.scheduleAtFixedRate(new task3(), 0, 60, TimeUnit.SECONDS); 

Option2

 ScheduledExecutorService service = Executors.newScheduledThreadPool(3); 
     service.scheduleAtFixedRate(new task1(), 0, 60, TimeUnit.SECONDS); 
     service.scheduleAtFixedRate(new task2(), 0, 60, TimeUnit.SECONDS); 
     service.scheduleAtFixedRate(new task3(), 0, 60, TimeUnit.SECONDS); 

Ma question est quelle option est préférée? Est-ce que l'Option1 consomme plus de ressources système?

Répondre

1

Je ne connais pas les détails d'implémentation pour donner une réponse précise quant à l'utilisation qui consomme plus de ressources système. Mais la deuxième option est certainement celle qui est supportée par Javadoc, les tutoriels, etc. Il y a quelques raisons que je peux souligner. Tout d'abord, l'interface ScheduledExecutorService expose la possibilité de planifier plusieurs tâches avec un seul service.

Il existe également une raison de ne pas utiliser la première option. Vous essayiez de planifier trois tâches en utilisant trois exécuteurs distincts. Mais il n'y a aucune garantie que les trois tâches commenceraient en même temps, mais les exécuteurs sont différents et pourraient être lancés à des moments différents. D'un autre côté, si vous avez utilisé un seul service d'exécution, les trois tâches doivent être démarrées simultanément.