【发布时间】:2012-10-31 08:41:18
【问题描述】:
我实际上正在寻找一种更简单的方法来杀死线程,无论线程在哪里运行。但是互联网上的大多数解决方案都指向我使用布尔标志来控制线程的执行,如果我想停止线程然后将布尔变量设置为 false。
但是,如果可运行的任务是一个 LONG 线性任务,这意味着任务不重复怎么办?在这种情况下,创建一个“while”循环来覆盖整个任务块并不容易。
使用 Thread.stop 确实很诱人,但“已弃用”警告似乎使用起来非常危险。我已通读这篇文章 Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?
但我看不懂
如果以前受这些监视器保护的任何对象在 不一致的状态,其他线程现在可以查看这些对象 不一致的状态。据说此类物体已损坏。
“不一致的状态”是什么意思?如果有人能对此进行解释,我将不胜感激。
我想将我的问题扩展到更底层的视图,比如说 JVM 中的i = i + 1;(可能是汇编语言),也许这个 Java 语句会被分成几个更小的指令,例如move i ; add i ; get i into memory 0x0101(这是一个例子!我完全不懂汇编语言!)
现在,如果我们调用 thread.stop,它实际上会停在哪里?线程会在完成 Java 语句后停止,还是可能处于“汇编语言”的中间?如果答案是第二个,难道是我们说的理由吗?
据说这样的物体已经损坏了。
?
好的,我的问题有点混乱,希望有人能理解和解释。提前致谢。
【问题讨论】:
标签: java multithreading