如何取消计时器的现有计划
目前我正在使用计时器在每个间隔时间执行一些函数。但是,稍后当我想更改执行该功能的间隔时,我无法取消之前的计划。如何解决这个问题?谢谢
Currently I am using a timer to execute some function every interval time. However, later on when I want to change the interval of executing the function, I cannot cancel the previous schedule. how this can be solved? Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
timer.cancel()
方法,您可以取消计时器和所有计划任务。 (请参阅 API 文档)或者您可以在 TimerTask 上调用 cancel 方法timertask.cancel()
(请参阅API 文档)如果您想更改预定时间您应该取消 TimerTask 并添加新的 TimerTask。
With the
timer.cancel()
method you can cancels the Timer and all scheduled tasks. (see API documentation) or you can call the cancel method on your TimerTasktimertask.cancel()
(see API documentation)If you want to change the scheduled time you should cancel the TimerTask and add a new TimerTask.
您可以考虑使用 ScheduledThreadPoolExecutor 而不是
计时器。
用法非常简单。您创建一个执行器的实例:
然后当您想要添加一个任务时,您可以调用:
其中
myRunnable
是您的任务(它实现Runnable
接口),delay
是第一次执行任务之前需要多长时间,interval
是第一次执行任务之后执行任务之间的时间。delay
和interval
是根据unit
参数测量的,该参数可以是 TimeUnit.*(其中 * 是 SECONDS、MINUTES、MILLISECONDS 等) 。然后要停止执行,您可以调用:
然后您可以以不同的时间间隔重新提交任务。
注意:在重新提交任务之前,您可能需要创建执行器的新实例,但我不太确定为什么。
You could look into using a ScheduledThreadPoolExecutor instead of a
Timer
.Usage is pretty straight forward. You create an instance of an executor:
And then when you want to add a task you call:
Where
myRunnable
is your task (which implements theRunnable
-interface),delay
is how long before the task should be executed the first time,interval
is time between the execution of the task after first execution.delay
andinterval
are meassured based on theunit
parameter, which can be TimeUnit.* (where * is SECONDS, MINUTES, MILLISECONDS etc.).Then to stop the execution you call:
And then you can re-submit your task with a different interval.
Note: You might need to create a new instance of the executor before resubmitting your task, but I'm not quite sure why.