结束无响应线程。

我已经构建了一个 Java 应用程序,并且有一个线程在后台运行当按钮被按下时。问题是,该线程可能会锁定,可能是由于无限循环。有没有办法强制终止该线程?

EDIT:我在 Java 平台上使用 LuaJ。它有可能会锁定,除了在另一个线程中运行它并在 Java 或脚本完成时将其杀死之外,我没有太多控制权。

原文链接 https://stackoverflow.com/questions/3807086

点赞
stackoverflow用户171061
stackoverflow用户171061

不,没有。如果不使用大量的巫术,你唯一的选择就是在它上面调用 interrupt(),并等待它打到一个阻塞调用的时候。此时,它会抛出一个 InterruptedException,你应该终止线程。

如果它在一个如 while(1); 的循环中,你无法做太多事情;你需要修复你的线程,使其不这样做,或者至少检查一个标志并停止自己。

例如,你可以重写:

while(1) {
    doWork();
}

为:

class Whatever {
    private volatile boolean stop = false;
    ...
        while (!stop) {
            doALittleWork();
        }
    ...
}

曾经有一个 Thread.stop() 方法可以做到这一点,但是它已经过时了,有非常好的原因,不应该使用。

编辑: 由于你正在运行一个解释器,你需要在每条语句执行后(或者像这样)挂钩并检查你的魔法 stop 变量,如果出现,终止 Lua 执行。或者,Lua 运行时可能有它自己的 "终止" 标志,你可以使用它——我查看了文档,但他们的网站太糟糕了,所以你可能需要查阅代码。

除此之外,你可能需要手动修补 Lua4j 源代码以添加此功能。你的选择相当有限,最终线程必须以某种方式控制自己的命运。

2010-09-27 19:27:14
stackoverflow用户172543
stackoverflow用户172543

最终发布了Java V5.0(或V1.5),其中包含java.util.concurrent。这样就可以给出一个明确的答案了。答案是,你可以使用interrupt()来停止一个线程。

2010-09-27 19:36:43