停止java Thread和停止Timer实例有什么区别?
为什么timer.cancel线程安全或是吗?
答案 0 :(得分:12)
取消计时器不具有中止线程的任何潜在不稳定行为。来自the docs:
不会干扰当前正在执行的任务(如果存在)。
换句话说,它不会尝试停止已经运行的任务,这可能最终导致监视器未被释放等。这只是为了避免运行任何更多任务。
答案 1 :(得分:2)
Timer.cancel
仅取消尚未启动的计时器任务。 Thread.stop
方法停止线程(通过抛出Error
)并且可能使系统处于不一致状态,因为线程在未知位置停止,可能在执行某些操作时。
答案 2 :(得分:2)
Java的Timer
实现使用循环和标志来指示其底层Thread
是否应继续处理计时器事件。当您调用cancel()
时,newTasksMayBeScheduled
标志设置为false,清除所有挂起事件,并导致线程循环停止(允许其run()
方法返回)。换句话说,它不使用不安全的Thread#stop()
方法。