【发布时间】:2013-05-06 10:18:42
【问题描述】:
为什么在 Java 中不推荐使用 Thread.stop()?在他们的网站上,我看到以下内容:
为什么不推荐使用
Thread.stop?因为它本质上是不安全的。停止线程会导致它解锁所有已锁定的监视器。 (当
ThreadDeath异常向上传播堆栈时,监视器被解锁。)如果以前受这些监视器保护的任何对象处于不一致状态,其他线程现在可能会查看这些处于不一致状态的对象。据说这些物体已损坏。当线程对损坏的对象进行操作时,可能会导致任意行为。这种行为可能很微妙且难以检测,也可能很明显。与其他未经检查的异常不同,ThreadDeath以静默方式杀死线程;因此,用户没有警告他的程序可能已损坏。损坏可以在实际损坏发生后的任何时间出现,甚至在未来几小时或几天内。
我不明白他们所说的“监视器”是什么意思。无论如何,我的问题是如果不应该调用 Thread.stop(),那么应该如何停止 Java 线程?
【问题讨论】:
-
监视器是多线程控制和通信的关键概念。您应该花时间阅读this 之类的内容,以便更好地理解。从技术上讲,不,没有任何确定的方法可以停止任何线程,如果它有内部机制允许它的事件,因为库的其他部分可能不会监视线程的状态
标签: java multithreading