gpt4 book ai didi

java - Java thread.stop() 是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:08 25 4
gpt4 key购买 nike

我实际上正在寻找一种更简单的方法来终止线程,而不管线程在何处运行。但是互联网上的大多数解决方案都指向我使用 boolean 标志来控制线程的执行,如果我想停止线程然后将 boolean 变量设置为 false。

但是如果runnable 中的任务是一个LONG 线性任务,这意味着该任务不重复怎么办?在那种情况下,创建一个“while”循环来覆盖整个任务 block 就不是那么容易了。

使用 Thread.stop 真的很诱人,但警告“已弃用”似乎使用起来很危险。我已经阅读了这篇文章 Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?

但是我听不懂

If any of the objects previously protected by these monitors were in an inconsistent state, other threads may now view these objects in an inconsistent state. Such objects are said to be damaged.

“不一致状态”是什么意思?如果有人能解释一下,我将不胜感激。

我想将我的问题扩展到更底层的 View ,假设 i = i + 1; 在 JVM(可能类似于汇编语言)中,也许这个 Java 语句会被拆分成几个更小的指令,例如 move i ;添加我; get i into memory 0x0101(这是一个例子!我完全不懂汇编语言!)

现在,如果我们调用 thread.stop,它实际上会在哪里停止?线程会在 COMPLETED Java 语句后停止,还是会在“汇编语言”的中间?如果答案是第二个,会不会是我们说的原因

Such objects are said to be damaged.

?

好吧,我的问题有点乱,希望有人能理解和解释。提前致谢。

最佳答案

“损坏的对象”是一个高级概念,它不会发生在 JVM 级别。程序员通过用锁保护关键部分来设计他的类时考虑到线程安全。每个关键部分要么全部运行,要么根本不运行,这是他的类(class)的一个不变量。当您停止 一个线程时,临界区可能在中间被中断,因此破坏了不变量。在那一刻,对象损坏

停止一个线程会隐藏更多的危险,比如没有执行清理,没有释放获取的资源等。如果一个线程不放弃它正在做的事情,就没有办法在不损害整个应用程序的情况下让它停止。

在实践中,每当需要运行可能需要强制中止的外来代码时,这必须在单独的进程中完成,因为终止进程至少执行操作系统级别的清理和在遏制损害方面做得更好。

关于java - Java thread.stop() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com