当定时器中安排了Java TimerTask时,是否已经执行了?
我想澄清一下有关TimerTask的内容.当你有下面的代码:
timer.schedule(task,60000); 任务计划在接下来的1分钟内运行,任务对象是否已经执行? 因为我的代码中的某个地方我调用了task.cancel(),但似乎这个调用并没有阻止 任务执行.我甚至从调用记录返回值,它返回false. 当我阅读取消方法的文档时,我遇到了我的问题:
我相信我在1分钟延迟之前调用了cancel().但是如何取消返回false, [任务]是否已经执行? 希望你可以给我提供线索/提示甚至是解释.谢谢你! 解决方法
>任务计划在接下来的1分钟内运行,任务对象已经执行
不,它将在60秒内调用此任务的run方法.如果task.cancel()返回false,那可能意味着3件事情: >该任务已安排一次性执行,并已运行OR 因此,如果您确定在调度任务之后60秒之前呼叫取消,您可能可能会调用它多次,并获得后续取消的结果,或者您正在调用另一个任务中的取消. 一般来说,我建议Timer赞成ScheduledExecutorService 您可以通过以下方式实现所需的功能: ScheduledExecutorService.schedule( callable,delay,timeunit ) 为什么ScheduledExecutorService是一个首选方式的原因概述here: > Timer可以对系统时钟的变化敏感,ScheduledThreadPoolExecutor不是> Timer只有一个执行线程,所以长时间运行的任务可以延迟其他任务. ScheduledThreadPoolExecutor可以配置任意数量的线程.此外,您可以完全控制创建的线程,如果需要(通过提供ThreadFactory)> TimerTask中抛出的运行时异常kill一个线程,从而使计时器死机:-( …即计划任务不再运行.ScheduledThreadExecutor不仅捕获运行时异常,而且可以让您处理它们(通过覆盖afterExecute方法从ThreadPoolExecutor).抛出异常的任务将被取消,但其他任务将继续运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – JDBC批处理执行速度极慢
- java – org.apache.jasper.JasperException:当未指定默认
- struts2中使用注解配置Action方法详解
- MyBatis中的properties配置(推荐)
- java – <?扩展A>不会接受A的子类
- 在Java中重复排列(字符串的形式为:00001112222)
- java – JAXB Generation nillable = true
- 浅谈java实现重载的方法
- java – 我们如何使用Hibernate和JPA调用存储过程?
- 线程“main”中的异常java.lang.OutOfMemoryError:GWT应用