3

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

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

4

2 回答 2

6

不,那里没有。没有主要巫术的唯一选择是在其上调用 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-27T19:27:14.700 回答
0

Finally with the release of Java V5.0 (or V1.5), which incorporates java.util.concurrent, a definitive answer can be given. The answer is you stop a thread by using interrupt().

于 2010-09-27T19:36:43.000 回答