我的一些用户一直在报告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)
我在文档中遗漏了什么,为什么会在新线程上失败?
答案 0 :(得分:2)
Thread#start()
个州的javadoc
抛出: IllegalThreadStateException - 如果线程已经存在 启动。
您没有提供太多信息,但可能会发生以下情况。
第一个线程执行
head.threadSeal = new ThreadFindSeal();
然后执行第二个线程
head.threadSeal = new ThreadFindSeal();
head.threadSeal.start();
替换Thread
并启动它。
然后第一个线程执行
head.threadSeal.start();
在与之前相同的Thread
对象上调用,该对象已经开始。