当我阅读java.util.Timer
的源代码时,我发现java.util.Timer
是由TimerThread
和TaskQueue
据说java.util.Timer
可以取消java.util.Timer.cancel()
,
但是当我打电话给java.util.Timer.cancel()
时,我发现Timer中的TimerThread仍在运行,
这是在线系统的问题吗?
如果可能,我如何在TimerThread
内停止java.util.Timer
?
从TimerThread
(jdk 7)的来源,我终于发现Timer.cancel()
可行。
TimerThread 等待 TaskQueue
,当Timer.cancel()
被调用时,TaskQueue
通知 TimerThread
,并且TimerThead应该最终退出如果`TaskQueue是EMPTY ......
感谢您的评论,抱歉浪费您的时间。
答案 0 :(得分:2)
计时器线程仍将运行。但是根据实现,计时器线程将停止接受任何进入队列的任何内容。
timer
(TimerThread)线程只能通过Timer
类访问。 TimerThread
内容Timer
已被封装。实施方面,他们已确保Timer停止接受对其队列的请求,但TimerThread
本身并未停止。
答案 1 :(得分:1)
Timer
是单线程,其中包含要执行的Task
列表,一旦所有任务执行完毕,Timer
线程实例将在一段时间后被Garbage Collector
调用
答案 2 :(得分:0)
这可能会对您有所帮助......本节介绍了在某些情况下计时器线程不会结束的原因。
http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html