Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用Thread.stop方法时可能会发生什么样的损坏?_Java_Multithreading - Fatal编程技术网

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

Java 调用Thread.stop方法时可能会发生什么样的损坏?,java,multithreading,Java,Multithreading,我刚刚阅读了函数Thread.stop的JDK文档。上面说, 停止线程会使其解锁所有已锁定的监视器。如果以前受这些监视器保护的任何对象处于不一致状态,则其他线程现在可能会以不一致状态查看这些对象。这类对象被称为已损坏。当线程在损坏的对象上运行时,可能会导致任意行为 我只是不太明白。不一致状态是什么意思 那么,武断的行为会是什么呢?谁能给我解释一下吗 (我的问题与您认为重复的问题有点不同。我的问题强调可能的损坏,而前者强调可以使用什么方法来代替Thread.stop。)考虑任何类型的复杂数据结构,

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

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

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

那么,武断的行为会是什么呢?谁能给我解释一下吗


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

考虑任何类型的复杂数据结构,例如双链接列表。线程锁定结构,查看并更改它,然后释放锁。因此,请考虑:

  • 锁定列表

  • 调整前进指针

  • 调整相应的反向指针

  • 松开锁

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