目前我正在使用计时器在每个间隔时间执行一些功能。但是,稍后当我想更改执行函数的时间间隔时,我无法取消之前的时间表。怎么解决这个问题?感谢
答案 0 :(得分:5)
使用timer.cancel()
方法,您可以取消计时器和所有计划任务。 (请参阅API documentation)或者您可以在TimerTask timertask.cancel()
上调用cancel方法(参见API documentation)
如果要更改预定时间,应取消TimerTask并添加新的TimerTask。
答案 1 :(得分:3)
您可以考虑使用ScheduledThreadPoolExecutor代替Timer
。
用法很简单。您创建执行程序的实例:
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor( 1 );
然后当你想要添加一个你打电话的任务时:
executor.scheduleAtFixedRate( myRunnable, delay, interval, unit );
myRunnable
是您的任务(实现Runnable
- 接口),delay
是第一次执行任务的时间,interval
是时间首次执行后执行任务之间。 delay
和interval
基于unit
参数进行测量,该参数可以是TimeUnit。*(其中*是SECONDS,MINUTES,MILLISECONDS等)。
然后停止你打电话的执行:
executor.shutdownNow();
然后你可以用不同的间隔重新提交你的任务。
注意:在重新提交任务之前,您可能需要创建执行程序的新实例,但我不确定原因。