Некоторые из моих пользователей сообщают об ошибках 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)
Я что-то пропустил в документации, почему бы начать сбой в новом потоке?
Javadoc состояний Thread#start()
Throws: IllegalThreadStateException - если поток уже запущен.
Вы не даете много информации, но может случиться следующее.
Выполняется первая нить
head.threadSeal = new ThreadFindSeal();
Затем выполняется второй поток
head.threadSeal = new ThreadFindSeal();
head.threadSeal.start();
заменив Thread
и запустив его.
Затем выполняется первый поток
head.threadSeal.start();
который вызывается на том же объекте Thread
что и раньше, который уже был запущен.