【发布时间】:2010-11-09 14:35:17
【问题描述】:
我开发了一个 JSP Web 应用程序,它在每个请求时都会生成一个新的 Java 线程。在每个新生成的线程中,我使用 Runtime.exec() 创建一个进程,并将进程对象存储在线程的实例变量中。我有一个要求,我必须杀死创建的子进程并停止线程。因此,我覆盖了线程中的中断方法,并且在覆盖的方法中,我在实例变量中已经存储的 Process 对象上调用了 destroy()。以下是代码:
public class MyThread extends Thread {
private Process subprocess;
@Override
public void run() {
subprocess = Runtime.getRuntime().exec("myprocess.exe");
subprocess.waitFor();
/*
Some more statements
*/
}
@Override
public void interrupt() {
if(subprocess!=null) {
System.out.println("Destroying Process");
subprocess.destroy();
}
super.interrupt();
}
}
重写中断方法是否非法? 在中断创建它的线程之前杀死创建的进程很重要。我看到线程确实被中断了,因为 waitFor() 没有执行之后的语句。但是,destroy() 不起作用(但被调用)并且创建的“myprocess.exe”完成执行,即使我在完成之前调用了 interrupt() 方法。有人可以帮我解决这个问题吗?我错过了什么?
提前致谢
【问题讨论】:
标签: java multithreading process interrupt