在java中获取正在运行的计时器的实例

时间:2015-03-30 15:07:20

标签: java multithreading timer

是否可以在Java中获取正在运行的计时器的实例?

更确切地说,我想要做的是按名称获取当前运行的计时器并取消它。我怎么能这样做?

我尝试将其作为线程引用并将其转换为Timer,但它不允许。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

Timer关联的主题(可选择使用名称)。它本身不是一个帖子,因此您将Thread转换为Timer的尝试失败。

Timer的文档并未表明提供了按名称查找计时器的方法。此外,如果您查看source for Timer,您将看到没有任何类型的全局“注册”发生,即在某处不存在某些计时器名称映射到定时器。因此,你提出的要求是不可能的。

相反,您必须考虑设计中的替代方法。例如,根据需要正确跟踪TimerTaskcancel those。这将是最有意义的。我想你也可以在某个地方存储定时器名称的映射,但是如果你需要诉诸于此,它意味着你在概念上失去了TimerTask与某些地方管理特定任务的事物之间的联系,这可能表明设计问题。您也可以选择使用例如一个ScheduledExecutorService,这样您就必须跟踪Runnables(只需要管理一个中心ExecutorService),而不必跟踪单个计时器任务(代价是没有方便的TimerTask.cancel()) - 这可能会或可能不会简化设计。