是否可以在Java中获取正在运行的计时器的实例?
更确切地说,我想要做的是按名称获取当前运行的计时器并取消它。我怎么能这样做?
我尝试将其作为线程引用并将其转换为Timer,但它不允许。
有什么建议吗?
答案 0 :(得分:0)
Timer
有关联的主题(可选择使用名称)。它本身不是一个帖子,因此您将Thread
转换为Timer
的尝试失败。
Timer
的文档并未表明提供了按名称查找计时器的方法。此外,如果您查看source for Timer
,您将看到没有任何类型的全局“注册”发生,即在某处不存在某些计时器名称映射到定时器。因此,你提出的要求是不可能的。
相反,您必须考虑设计中的替代方法。例如,根据需要正确跟踪TimerTask
和cancel those。这将是最有意义的。我想你也可以在某个地方存储定时器名称的映射,但是如果你需要诉诸于此,它意味着你在概念上失去了TimerTask
与某些地方管理特定任务的事物之间的联系,这可能表明设计问题。您也可以选择使用例如一个ScheduledExecutorService
,这样您就必须跟踪Runnables
(只需要管理一个中心ExecutorService
),而不必跟踪单个计时器和任务(代价是没有方便的TimerTask.cancel()
) - 这可能会或可能不会简化设计。