我有一个JRuby引擎,它可以评估一些脚本,并且如果它需要超过5秒的时间我想关闭该线程。 我想是这样的:Java线程不会停止
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()
方法retured值始终true
杀死线程。
我该怎么办? 我想补充myScript可能是“while(1)do; end”,我不能等到它完成。所以我想要阻止这样的脚本,并且如果它花费超过5秒钟就杀死线程。
不要'扩展线程'。这是一个众所周知的反模式。 – 2012-07-23 12:03:31
它正在运行一个脚本,对吧?所以你需要停止它运行脚本。如果将'myScript'设置为null会发生什么?它会立即在线程中引发异常吗? – 2012-07-23 12:58:30
不,它不。如果我将'myScript'设置为“”,它会循环。它表现得像“while(1)do; end”。 – user1521526 2012-07-23 13:13:39