首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IllegalThreadStateException on Thread.interrupt

IllegalThreadStateException on Thread.interrupt
EN

Stack Overflow用户
提问于 2015-09-25 13:04:00
回答 1查看 379关注 0票数 0

我有一个java程序,它需要很长的时间来编译。

出于测试目的,如果编译需要很长的时间,我希望终止程序并重新启动它。

下面是我的代码的简化版本:

代码语言:javascript
复制
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看起来有点像这样:

代码语言:javascript
复制
public class Foo implements Runnable {
    // some code
    public void run () {
        try {
            while (!Thread.currentThread().isInterrupted()) {
                // some code
            }
        } catch(InterruptedException ex) {
            Thread.currentThread().interrupt();
        }       
    }
}

问题是程序崩溃并抛出一个IllegalThreadStateException

如果您需要完整的代码,如下所示:全码

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-25 13:08:07

不要在while(true)循环中启动foo线程。在Thread的生命周期中,您只能启动一次。

foo.start();移至while(true)上方

请参阅关于线程start()方法的oracle文档页

代码语言:javascript
复制
public void start()

导致该线程开始执行;Java虚拟机调用该线程的run方法。 结果是两个线程同时运行:当前线程(从对start方法的调用返回)和另一个线程(执行其run方法)。 一次以上启动线程从来都不是合法的。特别是,线程一旦完成执行就不能重新启动。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32782867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档