Sto utilizzando java.util.Timer per pianificare un'attività periodica. A un certo punto, mi piacerebbe spegnerlo, e attendere che finisca.In attesa del completamento di un timer in Java
Timer.cancel() impedirà l'esecuzione di attività future. Come posso assicurarmi che alcune attività non siano in esecuzione al momento (o aspettarle se lo sono?)
Posso introdurre meccanismi di sincronizzazione esterni, ma non vedo come possano coprire tutti i casi. Ad esempio, se eseguo la sincronizzazione su alcuni monitor all'interno dell'attività, mi manca ancora il caso quando l'attività ha appena iniziato ad essere eseguita ma non ha preso il monitor.
Qual è la pratica consigliata per l'attesa fino a quando tutte le attività vengono effettivamente eseguite, incluse le attività attualmente in esecuzione?
+1. Oppure, se per qualche motivo devi usare un 'Timer', puoi usare una Condizione (http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/ Condition.html) per sincronizzare due thread su un evento (ad esempio il completamento dell'attività pianificata). –
Sì, la voce 68 in Java efficace (2a edizione) consiglia ScheduledThreadPoolExecutor come sostituzione più flessibile per Timer. +1 per aver menzionato questo, come richiesto per le pratiche raccomandate. – Jonik
Sì, dovrei davvero leggere quel libro. – ripper234