J'ai lu beaucoup de choses à ce sujet ces dernières heures, et je ne vois tout simplement pas de raison ( valide raison) pour appeler shutdown()
sur le ExecutorService
Il n'y a pas de raison de s'inquiéter, à moins d'avoir une application gigantesque qui stocke des dizaines et des dizaines de services d'exécution différents qui ne sont pas utilisés pendant une longue période.
La seule chose que fait l'arrêt (d'après ce que j'ai compris), c'est faire ce que fait un fil normal une fois qu'il est terminé. Lorsque le thread normal termine la méthode d'exécution du Runnable (ou Callable), il est transmis au Garbage Collection pour être collecté. Avec le service Executor, les threads seront simplement mis en attente, ils ne seront pas cochés pour le ramassage des ordures. Pour cela, l'arrêt est nécessaire.
Ok, revenons à ma question. Y a-t-il une raison d'appeler shutdown sur ExecutorService
très souvent, ou même juste après lui avoir soumis certaines tâches ? Je voudrais laisser derrière moi le cas où quelqu'un le fait et juste après appelle à awaitTermination()
comme cela est validé. Une fois que nous faisons cela, nous devons recréer une nouvelle ExecutorService
encore une fois, pour faire la même chose. N'est-ce pas l'idée même de la ExecutorService
pour réutiliser les fils ? Alors pourquoi détruire le ExecutorService
si tôt ?
N'est-ce pas une façon rationnelle de créer simplement ExecutorService
(ou deux selon le nombre dont vous avez besoin), puis pendant l'exécution de l'application, leur transmettre les tâches lorsqu'elles se présentent, et enfin à la sortie de l'application ou à d'autres étapes importantes, arrêter ces exécuteurs ?
J'aimerais avoir la réponse de quelques codeurs expérimentés qui écrivent beaucoup de code asynchrone en utilisant les ExecutorServices.
La deuxième question secondaire, un peu plus petite, concerne la plateforme Android. Si certains d'entre vous disent que ce n'est pas la meilleure idée de fermer les exécuteurs à chaque fois, et que votre programme est sur Android, pourriez-vous me dire comment vous gérez ces fermetures (pour être précis - quand vous les exécutez) lorsque nous traitons différents événements du cycle de vie de l'application.
En raison du commentaire sur CommonsWare, j'ai rendu le message neutre. Je n'ai vraiment pas envie d'en débattre à mort et il semble que ça y mène. Je suis seulement intéressé à apprendre ce que j'ai demandé ici auprès de développeurs expérimentés s'ils sont prêts à partager leurs expériences. Merci.