いくつかのスクリプトを評価する 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()
orを使用してスレッドを強制終了しようとしましth1.interrupt()
たが、メソッドによって返される値th1.isAlive()
は常にtrue
です。
私に何ができる?myScript が "while(1) do; end" になる可能性があることを付け加えたいと思いますが、それが完了するまで待ちきれません。そのため、そのようなスクリプトを防止し、5 秒以上かかる場合はスレッドを強制終了したいと考えています。