ScheduledExecutorService
Je souhaite vous proposer une alternative à la Minuterie à l'aide de - ScheduledThreadPoolExecutor, une mise en œuvre de la ScheduledExecutorService interface. Il a certains avantages par rapport à la classe Timer (de "Java dans la Simultanéité"):
Une Minuterie ne crée qu'un seul thread pour l'exécution de la minuterie tâches. Si une minuterie tâche prend trop de temps à s'exécuter, la précision du timing des autres TimerTasks peuvent en souffrir. Si une récurrents TimerTask est planifiée pour s'exécuter toutes les 10 ms, et un autre Timer-Tâche prend 40 ms pour exécuter la tâche récurrente, soit (selon qu'il a été prévu, à taux fixe ou à taux fixe de retard) est appelée quatre fois en succession rapide après la fin de la tâche, ou "manque" quatre invocations complètement. Prévue pools de threads remédier à cette limitation en vous permettant de fournir de multiples threads pour l'exécution différée et de tâches périodiques.
Un autre problème avec le Timer, c'est qu'il se comporte mal si un TimerTask jette un décoché exception. La Minuterie thread n'a pas intercepter l'exception, donc, un décoché exception générée à partir d'un TimerTask se termine le thread horloge. La minuterie ne pas ressusciter le fil dans cette situation; au lieu de cela, il suppose, à tort, l'ensemble de la Minuterie est annulé. Dans ce cas, TimerTasks qui sont d'ores et déjà prévue mais non encore exécutées ne sont jamais fonctionner, et de nouvelles tâches ne peut pas être programmée. (Ce problème, appelé "fils de fuite").
Et une autre recommandation si vous avez besoin pour construire votre propre service de planification, vous pouvez toujours être en mesure de prendre avantage de la bibliothèque à l'aide d'un DelayQueue, un BlockingQueue de mise en œuvre qui fournit la fonctionnalité de planification de ScheduledThreadPoolExecutor. Un DelayQueue gère une collection de Retard objets. Un Retard a un temps de retard qui lui est associé: DelayQueue vous permet de prendre un élément seulement si le délai a expiré. Les objets retournés à partir d'une DelayQueue commandé par le temps associé à leur retard.