powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / убить зависший thread
4 сообщений из 4, страница 1 из 1
убить зависший thread
    #38509133
Tyo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите плз не очень опытному в джаве человеку.
Есть примерно вот такой код

for (i=0;i<10;i++) {
threadArray.add(new MyThread());
}
for (i=0;i<10;i++) {
MyThread myThread = threadArray.get(i);
try {
myThread.join(2000);
} catch (InterruptedExecution ex) {
continue;
}
}

Вопрос такой: можно ли как-то сделать так, чтобы принудительно килять myThread, если он где-то внутри зациклился и джойн за 2 секунды так и не дождался его окончания? При этом не менять код MyThread.
Я пытался сделать вот так

if (myThread.isAlive) myThread.destroy, но он что-то ругается

Заранее спасибо

но он что-то ругается
...
Рейтинг: 0 / 0
убить зависший thread
    #38509238
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы почитайте JavaDoc к destroy(), и все поймете. Универсального способа убить поток в Java нет. Обычно это делают через volatile флажки, AtomicBoolean или вызова Thread.interrupt() в одном потоке, и проверке Thread.isInterrupted() в другом.
...
Рейтинг: 0 / 0
убить зависший thread
    #38513444
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tyo,

Если myThread implements Callable,

то можно попробовать использовать
service = Executors.newFixedThreadPool(poolSize);
Future future = service.submit(rqsLink_handler);

теперь останавливаем:

future.cancel(true);
...
Рейтинг: 0 / 0
убить зависший thread
    #38513464
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxifly ,
Ну так а что делает future.cancel(true)? Не ленитесь, смотрите исходный код. Там все очень просто - на потоке, выполняющем задачу, вызывается Thread.interrupt(). И кто вам сказал, что поток на этот интерапт отреагирует? Никаких гарантий нет.
Поэтому я повторюсь - универсальных механизмов нет и не может быть. Самый надежный - это комбинация волатильного флажка, который ваш Runnable периодически проверяет, плюс вызов Thread.interrupt().
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / убить зависший thread
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]