我有一個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