我实际上正在寻找一种更简单的方法来杀死线程,无论线程在哪里运行。但是互联网上大多数解决方案都指向使用布尔标志来控制线程的执行,如果要停止线程,则将布尔变量设置为false。
但是,如果可运行代码块中的任务是一个长时间的线性任务,那该怎么办呢?在这种情况下,创建一个“while”循环以覆盖整个任务块并不容易。
使用Thread.stop确实很诱人,但是警告“已弃用”似乎相当危险。我阅读了这篇文章Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated? 但我不理解
如果之前受这些监视器保护的任何对象处于不一致状态,则其他线程现在可能会查看这些对象处于不一致状态。这样的对象被称为已损坏。
“不一致状态”是什么意思?如果有人能解释一下,我将不胜感激。
我想将我的问题扩展到更低层次的视角,比如在JVM中(可能类似汇编语言),
现在,如果我们调用thread.stop,它实际上会停在哪里?线程是否会在完成Java语句后停止,或者可能停在“汇编语言”的中间?如果答案是后者,那么这是否可以解释我们所说的:
但是,如果可运行代码块中的任务是一个长时间的线性任务,那该怎么办呢?在这种情况下,创建一个“while”循环以覆盖整个任务块并不容易。
使用Thread.stop确实很诱人,但是警告“已弃用”似乎相当危险。我阅读了这篇文章Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated? 但我不理解
如果之前受这些监视器保护的任何对象处于不一致状态,则其他线程现在可能会查看这些对象处于不一致状态。这样的对象被称为已损坏。
“不一致状态”是什么意思?如果有人能解释一下,我将不胜感激。
我想将我的问题扩展到更低层次的视角,比如在JVM中(可能类似汇编语言),
i = i + 1;
这个Java语句可能会被拆分为几个较小的指令,例如像move i; add i; 将i存入内存0x0101
(这只是一个例子!我完全不懂汇编语言!)现在,如果我们调用thread.stop,它实际上会停在哪里?线程是否会在完成Java语句后停止,或者可能停在“汇编语言”的中间?如果答案是后者,那么这是否可以解释我们所说的:
这些对象被称为已损坏。
?
好的,我的问题有点混乱,希望有人能理解并解释一下。先谢谢了。