J'utilise java.util.Timer pour planifier une tâche périodique. À un moment donné, je voudrais le fermer, et l'attendre pour finir.En attente de la fin d'un minuteur en Java
Timer.cancel() empêche l'exécution de toute tâche future. Comment est-ce que je m'assure que n'importe quelles tâches n'existent pas actuellement (ou les attendez si elles sont?)
Je peux introduire des mécanismes externes de synchronisation, mais je ne vois pas comment elles peuvent couvrir tous les cas. Par exemple, si je synchronise sur un moniteur dans la tâche, je manque toujours le cas lorsque la tâche a commencé à s'exécuter mais n'a pas pris le moniteur.
Quelle est la pratique recommandée pour attendre que toutes les tâches soient réellement effectuées, y compris les tâches en cours d'exécution?
+1. Ou, si vous devez utiliser un 'Timer' pour une raison quelconque, alors vous pouvez utiliser une condition (http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/ Condition.html) pour synchroniser deux threads sur un événement (comme l'achèvement de la tâche planifiée). –
Ouais, l'article 68 dans Effective Java (2e éd) recommande ScheduledThreadPoolExecutor comme un remplacement plus flexible pour Timer. +1 pour mentionner cela, car les pratiques recommandées ont été demandées. – Jonik
Oui, je devrais vraiment lire ce livre. – ripper234