为什么不推荐使用thread.stop而不支持timer.cancel?

时间:2011-06-27 19:04:51

标签: java

停止java Thread和停止Timer实例有什么区别?

为什么timer.cancel线程安全或是吗?

3 个答案:

答案 0 :(得分:12)

取消计时器不具有中止线程的任何潜在不稳定行为。来自the docs

  

不会干扰当前正在执行的任务(如果存在)。

换句话说,它不会尝试停止已经运行的任务,这可能最终导致监视器未被释放等。这只是为了避免运行任何更多任务。

答案 1 :(得分:2)

Timer.cancel仅取消尚未启动的计时器任务。 Thread.stop方法停止线程(通过抛出Error)并且可能使系统处于不一致状态,因为线程在未知位置停止,可能在执行某些操作时。

答案 2 :(得分:2)

Java的Timer实现使用循环和标志来指示其底层Thread是否应继续处理计时器事件。当您调用cancel()时,newTasksMayBeScheduled标志设置为false,清除所有挂起事件,并导致线程循环停止(允许其run()方法返回)。换句话说,它不使用不安全的Thread#stop()方法。