调用Thread.stop方法时可能会发生什么样的损坏?

时间:2014-03-27 15:51:36

标签: java multithreading

我刚刚阅读了Thread.stop函数的JDK文档。它说,

  

停止线程会导致它解锁已锁定的所有监视器。如果先前受这些监视器保护的任何对象处于不一致状态,则其他线程现在可以在不一致状态下查看这些对象。这些对象被认为已损坏。当线程对受损对象进行操作时,可能会导致任意行为。

我只是不太明白。 不一致状态是什么意思?

任意行为可以是什么?有人可以向我解释一下吗?

(我的问题与您认为重复的问题略有不同。我强调可能的损害,而前者强调可以用什么方法取代Thread.stop。)

1 个答案:

答案 0 :(得分:7)

考虑任何类型的复杂数据结构,比如双链表。线程锁定结构,查看并更改它,然后释放锁。所以考虑一下:

  1. 锁定列表。

  2. 调整前向指针。

  3. 调整相应的反向指针。

  4. 解锁。

  5. 想象一下,如果一个线程已经完成了步骤1和2,那么你就停止了它。双向链表无效,因为对它的修改已完成一半。如果另一个线程获取此锁并尝试遍历列表,则会导致灾难。