Assurer l'arrêt correct de Java ExecutorService
Les exécuteurs en Java offrent un moyen pratique de gérer les tâches asynchrones. Cependant, l'arrêt d'un exécuteur peut poser des problèmes, en particulier lorsqu'il s'agit de tâches de longue durée ou qui ne répondent pas.
Problème :
Considérez l'extrait de code :
<code class="java">ExecutorService exec = Executors.newSingleThreadExecutor(); // ... create and submit tasks exec.shutdownNow();</code>
Une fois toutes les tâches terminées, exec.isTerrated() reste faux, indiquant que certaines tâches ne se sont peut-être pas terminées correctement.
Solution :
Recommandée par Oracle approche est la méthode shutdownAndAwaitTermination :
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); try { // Wait for existing tasks to terminate (up to 60 seconds) if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Wait for cancelled tasks to respond (up to 60 seconds) if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { System.err.println("Pool did not terminate"); } } } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } }</code>
Résumé des méthodes d'arrêt :
En utilisant les méthodes d'arrêt appropriées, vous pouvez vous assurer que votre ExecutorService se termine correctement, en libérant des ressources et en garantissant un arrêt propre.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!