我刚刚阅读了Thread.stop函数的JDK文档。它说,
停止线程会导致它解锁已锁定的所有监视器。如果先前受这些监视器保护的任何对象处于不一致状态,则其他线程现在可以在不一致状态下查看这些对象。这些对象被认为已损坏。当线程对受损对象进行操作时,可能会导致任意行为。
我只是不太明白。 不一致状态是什么意思?
任意行为可以是什么?有人可以向我解释一下吗?
(我的问题与您认为重复的问题略有不同。我强调可能的损害,而前者强调可以用什么方法取代Thread.stop。)
答案 0 :(得分:7)
考虑任何类型的复杂数据结构,比如双链表。线程锁定结构,查看并更改它,然后释放锁。所以考虑一下:
锁定列表。
调整前向指针。
调整相应的反向指针。
解锁。
想象一下,如果一个线程已经完成了步骤1和2,那么你就停止了它。双向链表无效,因为对它的修改已完成一半。如果另一个线程获取此锁并尝试遍历列表,则会导致灾难。