L'exécuteur semble être une abstraction pure. Quand voudriez-vous utiliser Thread directement plutôt que de vous fier à un exécuteur plus robuste?
Réponses
Trop de publicités?Pour donner un peu d’historique, les exécuteurs n’ont été ajoutés qu’au standard Java de Java 1.5. Ainsi, à certains égards, les exécuteurs peuvent être considérés comme une nouvelle meilleure abstraction pour traiter les tâches exécutables.
Un peu trop de simplification à venir ... - Les exécuteurs sont des fils bien faits, utilisez-les donc de préférence.
J'ai utiliser le Thread quand j'ai besoin d'un pull en fonction de traitement des messages. E. g. une File d'attente est de prendre()-fr en boucle dans un thread séparé. Par exemple, vous envelopper d'une file d'attente dans un coûteux contexte permet de dire d'une connexion JDBC, JMS, connexion, les fichiers à traiter à partir d'un seul disque, etc.
Avant que je sois maudit, avez-vous du scénario?
Edit:
Comme indiqué par d'autres, l' Executor
(ExecutorService
) interface a plus de potentiel, que vous pouvez utiliser l' Executors
pour sélectionner un comportement: planifié, en priorité, la mise en cache etc. dans Java 5+ ou un "j".u.c backport pour Java 1.4.
L'exécuteur cadre de la protection contre écrasé runnables et automatiquement re-créer les threads de travail. Un seul inconvénient à mon avis, que vous avez explicitement shutdown()
et awaitTermination()
avant de quitter votre application - qui n'est pas facile dans les applications à interface graphique.
Si vous utilisez délimitée files d'attente, vous devez spécifier un RejectedExecutionHandler
ou la nouvelle runnables sont jetés.
Vous pourriez avoir un coup d'oeil à Brian Goetz et al: la Java de la Simultanéité dans la Pratique (2006)
Eh bien, j'ai pensé qu'une ThreadPoolExecutor fourni de meilleures performances pour elle gère un pool de threads, réduire la surcharge de l'instanciation d'un nouveau fil de discussion, l'allocation de mémoire...
Et si vous allez lancer des milliers de threads, il vous donne un peu de files d'attente de la fonctionnalité que vous auriez à le programme par vous-même...
Filetage & Exécuteurs sont différents outils, utilisés sur différents scénarios... Comme je le vois, c'est comme demander pourquoi devrais-je utiliser ArrayList quand je peux utiliser la table de hachage? Ils sont différents...