我有一个java程序,它需要很长的时间来编译。
出于测试目的,如果编译需要很长的时间,我希望终止程序并重新启动它。
下面是我的代码的简化版本:
public class Main {
public static void main(String[] args) {
Thread foo = new Thread(new Foo());
while (true) {
foo.start();
while (true) {
if (needRestart()) {
foo.interrupt();
break;
}
}
}
}
}foo.java看起来有点像这样:
public class Foo implements Runnable {
// some code
public void run () {
try {
while (!Thread.currentThread().isInterrupted()) {
// some code
}
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}问题是程序崩溃并抛出一个IllegalThreadStateException
如果您需要完整的代码,如下所示:全码
发布于 2015-09-25 13:08:07
不要在while(true)循环中启动foo线程。在Thread的生命周期中,您只能启动一次。
将foo.start();移至while(true)上方
请参阅关于线程类start()方法的oracle文档页
public void start()导致该线程开始执行;Java虚拟机调用该线程的run方法。 结果是两个线程同时运行:当前线程(从对start方法的调用返回)和另一个线程(执行其run方法)。 一次以上启动线程从来都不是合法的。特别是,线程一旦完成执行就不能重新启动。。
https://stackoverflow.com/questions/32782867
复制相似问题