Ran*_*nez 11 java timer timertask
我想澄清一下有关TimerTask的内容.如果您有以下代码:
timer.schedule(task, 60000);
Run Code Online (Sandbox Code Playgroud)
如果任务计划在接下来的1分钟内运行,那么任务对象是否已在执行?
因为在我的代码中某处我调用了task.cancel()但似乎调用并没有阻止
要执行的任务.我甚至记录了来自调用的返回值,它返回false.
当我阅读取消方法的文档时,我想到了我的问题:
取消TimerTask并将其从Timer的队列中删除.通常,如果调用没有阻止TimerTask至少运行一次,则返回false.后续调用无效.如果调用阻止了计划执行,则返回true,否则返回false.
我相信我在1分钟的延迟之前打电话给cancel().但是如何取消返回false,
是[任务]已经执行了吗?
希望你能给我提供线索/提示甚至解释.谢谢!
tol*_*ius 19
不,它将在60秒内调用此任务的run方法.如果task.cancel()返回false,那可能意味着三件事:
因此,如果您确定cancel在安排任务后60秒之前调用,则可能会多次调用它,并从后续cancel调用获得结果,或者您在其他任务上调用cancel.
您可以通过以下方式实现所需的功能
ScheduledExecutorService.schedule(可调用,延迟,timeunit)
这里概述了 ScheduledExecutorService是首选方式的原因:
定时器可以对系统时钟的变化敏感,而ScheduledThreadPoolExecutor则不然
Timer只有一个执行线程,因此长时间运行的任务可以延迟其他任务.ScheduledThreadPoolExecutor可以配置任意数量的线程.此外,如果需要,您可以完全控制创建的线程(通过提供ThreadFactory)
在TimerTask中抛出的运行时异常会杀死一个线程,从而使得计时器死机:-(...即计划任务将不再运行.ScheduledThreadExecutor不仅捕获运行时异常,而且它允许您根据需要处理它们(通过覆盖afterExecute方法) ThreadPoolExecutor).抛出异常的任务将被取消,但其他任务将继续运行.
| 归档时间: |
|
| 查看次数: |
16289 次 |
| 最近记录: |