Attualmente sto utilizzando un timer per eseguire alcune funzioni ogni intervallo di tempo. Tuttavia, più avanti, quando voglio modificare l'intervallo di esecuzione della funzione, non posso cancellare il programma precedente. come questo può essere risolto? Graziecome cancellare il programma esistente di un timer
risposta
Con il metodo timer.cancel()
è possibile annullare il timer e tutte le attività programmate. (Vedi API documentation) oppure è possibile chiamare il metodo annullare sul TimerTask timertask.cancel()
(vedi API documentation)
Se si desidera modificare il tempo previsto si dovrebbe annullare la TimerTask e aggiungere una nuova TimerTask.
TimerTask # cancel e quindi Timer # purge() non funziona. Funziona ancora. – JohnyTex
È possibile esaminare utilizzando ScheduledThreadPoolExecutor anziché Timer
.
L'utilizzo è piuttosto semplice. Si crea un'istanza di un esecutore:
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
E poi, quando si desidera aggiungere un compito si chiama:
executor.scheduleAtFixedRate(myRunnable, delay, interval, unit);
Dove myRunnable
è il vostro compito (che implementa il Runnable
-interface), delay
è quanto tempo prima che l'attività debba essere eseguita la prima volta, interval
è il tempo tra l'esecuzione dell'attività dopo la prima esecuzione. delay
e interval
sono misurati in base al parametro unit
, che può essere TimeUnit. * (Dove * è SECONDI, MINUTI, MILLISECONDI ecc.).
per interrompere l'esecuzione si chiama:
executor.shutdownNow();
e poi si può ri-inviare il vostro compito con un intervallo diverso.
Nota: potrebbe essere necessario creare una nuova istanza dell'esecutore prima di inviare nuovamente l'attività, ma non sono del tutto sicuro del perché.
come è diverso da un timer? – njzk2
Questo link ti dice un po 'delle differenze: http://www.dremsus.com/index.php/2011/03/why-scheduledthreadpoolexecutor-for-smartfoxserver-2x/ Anche questa domanda su Stackoverflow si rivolge alle differenze: http: //stackoverflow.com/questions/409932/java-timer-vs-executorservice – kaspermoerch
c'è comunque che non sia necessario arrestare l'executor o chiudere il timer? Non voglio creare una nuova istanza dell'oggetto executor o timer ... – user301
- 1. Come cancellare il testo esistente in un file
- 2. Come può un programma cancellare il proprio eseguibile
- 3. C'è un modo per cancellare tutti i timer JavaScript contemporaneamente?
- 4. Come cancellare e ricreare un codice EF esistente Primo database
- 5. Come cancellare il contenuto di un IFRAME?
- 6. Byte scritti in un file senza cancellare byte esistente
- 7. Come posso dire a un UIGestureRecognizer di cancellare un tocco esistente?
- 8. Come utilizzare la classe Timer per chiamare un metodo, fare qualcosa, resettare il timer, ripetere?
- 9. Come cancellare/cancellare il contenuto di un widget di Tkinter Text?
- 10. C# Come mettere in pausa un timer?
- 11. Come "cancellare" il buffer di ricezione su un DatagramSocket Java?
- 12. Come creare un timer usando tkinter?
- 13. Il timer C# non ticcherà
- 14. Come includere un timer in Bash Scripting?
- 15. cocos2d: Come impostare un timer
- 16. Come cancellare un UIWebView?
- 17. Come cancellare un dizionario?
- 18. Come cancellare un DatePicker
- 19. Come posso cancellare da Device.StartTimer?
- 20. Come arrestare il timer durante il debug
- 21. Come cancellare JTextField quando il mouse fa clic su JTextField
- 22. SpriteKit - Creazione di un timer
- 23. PyQt4 - creazione di un timer
- 24. Come posso cancellare il terminale in Ruby?
- 25. Aggiorna k8s ConfigMap o Secret senza cancellare quello esistente
- 26. Avvio e arresto di un timer PHP
- 27. Come cancellare/cancellare una variabile di cache
- 28. Come posso cancellare il contenuto di NSMutableAttributedString?
- 29. Come posso cancellare il valore di TextView?
- 30. Come cancellare il backbone localstorage
cosa intendi con "non posso cancellare il programma precedente"? non sai come farlo, o è che non si adatta alla tua architettura? – njzk2
Desidero annullare la pianificazione precedente e avviare una nuova pianificazione con intervallo diverso. Tuttavia, per il timer, non sembra esserci modo di fare questo .. in modo frustrante – user301
devi effettivamente annullare il timer e ricreare uno – njzk2