IllegalThreadStateException при запуске потока

1

Некоторые из моих пользователей сообщают об ошибках 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)

Я что-то пропустил в документации, почему бы начать сбой в новом потоке?

Теги:
multithreading

1 ответ

2
Лучший ответ

Javadoc состояний Thread#start()

Throws: IllegalThreadStateException - если поток уже запущен.

Вы не даете много информации, но может случиться следующее.

Выполняется первая нить

head.threadSeal = new ThreadFindSeal();

Затем выполняется второй поток

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

заменив Thread и запустив его.

Затем выполняется первый поток

head.threadSeal.start();

который вызывается на том же объекте Thread что и раньше, который уже был запущен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню