线程启动时出现IllegalThreadStateException

时间:2014-03-16 18:53:57

标签: java multithreading

我的一些用户一直在报告IllegalThreadStateExceptions,这会导致回到以下代码。我无法重新创建它,大多数人都能够毫无问题地执行这部分代码。

代码会定期重新执行,因此旧的线程应该被新的线程替换并启动,但这就是错误发生的地方。

if (head.threadSeal != null)
{
    head.threadSeal.interrupt();
}

head.threadSeal = new ThreadFindSeal();
head.threadSeal.start(); // IllegalThreadStateException here

相关堆栈跟踪:

java.lang.IllegalThreadStateException
    at java.lang.Thread.start(Thread.java:704)

我在文档中遗漏了什么,为什么会在新线程上失败?

1 个答案:

答案 0 :(得分:2)

Thread#start()个州的javadoc

  

抛出: IllegalThreadStateException - 如果线程已经存在   启动。

您没有提供太多信息,但可能会发生以下情况。

第一个线程执行

head.threadSeal = new ThreadFindSeal();

然后执行第二个线程

head.threadSeal = new ThreadFindSeal();
head.threadSeal.start();

替换Thread并启动它。

然后第一个线程执行

head.threadSeal.start();

在与之前相同的Thread对象上调用,该对象已经开始。