Vous ne devez pas soumettre de thread à un exécuteur. D'abord, c'est simplement un gaspillage parce que la seule méthode qui sera appelée est run()
, et vous avez juste besoin d'un Runnable
et n'avez pas besoin de Thread
pour cela. En second lieu, bien que ce problème soit résolu dans le dernier JDK, un problème de fuite de mémoire se produisait si vous créiez beaucoup d'objets Thread
et que vous n'appeliez pas .start()
dessus. Fondamentalement, la création d'objets Thread
alloue de la mémoire qui ne peut être récupérée qu'après l'appel de .start()
. Par conséquent, faire executor.submit(thread)
est potentiellement dangereux dans les JDK précédents (je pense qu'il a seulement été résolu dans JDK6 ou plus).
Pour en revenir à votre question, executor.submit (thread) n'est pas valide. C'est tout simplement faux, car un executor utilise son propre thread pour exécuter le runnable. C'est après tout le point d'utiliser un exécuteur testamentaire. Vous voulez séparer la tâche (invocation) et l'exécution. Seulement si vous voulez fournir l'exécuteur (thread), vous devriez utiliser Thread
, mais il est rare que vous deviez le faire. Généralement, il est conseillé d'implémenter un Runnable
et d'utiliser des exécuteurs pour l'exécuter, plutôt que de traiter vous-même avec Thread
.