gpt4 book ai didi

java - 终止无响应的线程

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:56:52 27 4
gpt4 key购买 nike

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

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

最佳答案

不,没有。没有主要巫术的唯一选择是调用 interrupt() 并等待它触发阻塞调用。那时,它会抛出一个 InterruptedException,您应该终止该线程。

如果它在一个循环中,比如 while(1); 你真的不能做太多;您需要修复您的线程以使其不执行此操作,或者至少检查一个标志并自行停止。

例如,您可以重写:

while(1) {
doWork();
}

作为:

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

曾经有一个Thread.stop()执行此操作的方法,但出于非常非常充分的理由已弃用,不应使用。

编辑:由于您可能正在运行一个解释器,因此您需要做的是在每个语句执行(或如此)之后 Hook 并检查您的魔法 stop 变量,如果是这样则终止 Lua 执行。或者,Lua 运行时可能有自己的“终止”标志供您使用 - 我查找了文档,但他们的网站很糟糕,因此您可能需要查看代码。

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

关于java - 终止无响应的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807086/

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