Pourquoi Executors.newCachedThreadPool java.util.concurrent.RejectedExecutionException pendant l'envoi
Certain nombre de tâches (threads) soumis est pas aussi énormes dans ce scénario de test.
source d'informationauteur Krishna Kumar
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de fournir des exemples de code de la façon dont vous instancier et d'appel
submit
sur la piscine (IP doit être un non-problème ici, puisque nous n'avons pas besoin des détails de l'intérieur de votreCallable
classes ou quelque chose comme ça).Sur la base des informations que vous avez donné, vous êtes presque certainement la fermeture de l'exécuteur service quelque part avant de soumettre le callable. Vérifiez si vous faites des appels à
shutdown
oushutdownNow
et si donc vous assurer que vous n'êtes pas à l'ajout de tâches après ce point.Au-delà de cela, vous pouvez enregistrer votre propre mise en œuvre de
java.util.concurrent.RejectedExecutionHandler
afin de faciliter le débogage; ses rejectedExecution message sera appelé à chaque fois que l'exécuteur testamentaire est pas en mesure d'accepter une tâche, de sorte que vous pouvez mettre quelques rudimentaire de l'etat-inspection de la logique là pour vous aider à trouver la cause.Je ne vois nulle part dans l'invocation de la
Executors.newCachedThreadPool()
méthodes d'où unRejectedExecutionException
est levée. Il y a trois cas seulement où il semble être jetés dans la version 6 de Java:execute()
sur unThreadPoolExecutor
et la taille maximale du pool a été atteint.execute()
sur unThreadPoolExecutor
en même temps queshutdownNow
et a essentiellement perdu la course avec leshutdownNow
appel.ScheduledThreadPoolExecutor
après l'exécuteur testamentaire a été mise à l'arrêt.