gpt4 book ai didi

Java线程不会停止

转载 作者:行者123 更新时间:2023-12-02 07:40:59 25 4
gpt4 key购买 nike

我有一个 JRuby 引擎,它会评估一些脚本,如果需要超过 5 秒,我想关闭线程。我尝试过这样的事情:

class myThread extends Thread{
boolean allDone = false;

public void threadDone() {
allDone = true;
}

public void run() {
while(true) {
engine.eval(myScript);
if(allDone)
return;
}
}

(...)

th1 = new myThread();
th1.start();
try {
Thread.sleep(5000);
if(th1.isAlive())
th1.threadDone();
} catch(InterruptedException e) {}

if(th1.isAlive())
System.out.println("Still alive");

我还尝试使用 th1.stop()th1.interrupt() 终止线程,但返回的值是 th1.isAlive() 方法始终为 true

我能做什么?我想补充一点,myScript 可能是“while(1) do; end”,我等不及它完成了。所以我想阻止这样的脚本,并在线程花费超过 5 秒时终止线程。

最佳答案

另一种解决方案是使用内置机制来中断线程:

public void run() {
while (!Thread.currentThread().isInterrupted()) {
engine.eval(myScript);
}
}

...
th1 = new myThread();
th1.start();
try {
Thread.sleep(5000);
th1.interrupt();
}

这样,就不需要 allDone 字段,并且没有同步失败的风险。

关于Java线程不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11612043/

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