Une chose que vous devez savoir est que ExecutorService
est une interface, pas une classe, donc la réponse pourrait être différentes pour différentes implémentations de ExecutorService
. Cela étant dit, il ne serait pas logique pour la plupart des applications si un ExecutorService
se comportait de la manière dont vous vous inquiétez. Il serait beaucoup plus logique si chaque thread de travail stockerait son résultat dans l'objet Future
qui a été renvoyé au client, puis oublier le résultat, et oublier le Future
, et passer à la tâche suivante.
IF qui est sa mise en œuvre, et si votre code aussi oublié le Future
, le Future
et le résultat à la fois seraient recueillis par le GC, et ce serait la fin de celui-ci.
C'est la mise en œuvre qui aurait du sens pour moi. Vous pouvez voir par vous-même comment la classe ThreadPoolExecutor
dans le projet OpenJDK ne fait en examinant le code source:
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/concurrent
Je pris un coup d'oeil rapide, mais je n'ai pas le temps de l'étudier en profondeur .
Comme je l'ai dit dans mon commentaire (ci-dessus), je voudrais écrire un test, et trouver pour moi-même si j'avais aucun doute.
_Je signifie un fil dans la piscine de fil ne pouvoir être réutilisé à nouveau depuis son résultat n'est pas retrieved_ Pouvez-vous décrire le comportement que vous pensez d'ici? –
C'est quelque chose que vous pourriez facilement tester: Créer un pool de threads fixe, soumettre plus de requêtes que le nombre de threads, et voir ce qu'il se passe. –
@SotiriosDelimanolis, merci pour la réponse et voter. Je suppose que si le pool de threads est de taille 5, si je soumets 5 threads, sans récupérer le résultat, si je peux soumettre le 6ème thread? Ceci est la question. –