|
|
|
убить зависший thread
|
|||
|---|---|---|---|
|
#18+
Подскажите плз не очень опытному в джаве человеку. Есть примерно вот такой код 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, но он что-то ругается Заранее спасибо но он что-то ругается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 10:20 |
|
||
|
убить зависший thread
|
|||
|---|---|---|---|
|
#18+
Ну вы почитайте JavaDoc к destroy(), и все поймете. Универсального способа убить поток в Java нет. Обычно это делают через volatile флажки, AtomicBoolean или вызова Thread.interrupt() в одном потоке, и проверке Thread.isInterrupted() в другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 14:40 |
|
||
|
убить зависший thread
|
|||
|---|---|---|---|
|
#18+
Tyo, Если myThread implements Callable, то можно попробовать использовать service = Executors.newFixedThreadPool(poolSize); Future future = service.submit(rqsLink_handler); теперь останавливаем: future.cancel(true); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 17:24 |
|
||
|
убить зависший thread
|
|||
|---|---|---|---|
|
#18+
Maxifly , Ну так а что делает future.cancel(true)? Не ленитесь, смотрите исходный код. Там все очень просто - на потоке, выполняющем задачу, вызывается Thread.interrupt(). И кто вам сказал, что поток на этот интерапт отреагирует? Никаких гарантий нет. Поэтому я повторюсь - универсальных механизмов нет и не может быть. Самый надежный - это комбинация волатильного флажка, который ваш Runnable периодически проверяет, плюс вызов Thread.interrupt(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 17:50 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38509238&tid=2127903]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
90ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 426ms |

| 0 / 0 |
