【发布时间】:2012-07-24 04:11:01
【问题描述】:
我有一个评估一些脚本的 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 秒就杀死线程。
【问题讨论】:
-
不要
extends Thread。这是众所周知的反模式。 -
它正在运行一个脚本,对吧?所以你需要停止它运行脚本。如果将“myScript”设置为 null 会发生什么?它会立即在线程中引发异常吗?
-
不,它没有。如果我将 'myScript' 设置为 "" 它会循环。它的行为类似于“while(1) do; end”。
-
@user1521526 - 值得一试:(
标签: java multithreading jruby