Как остановить поток?
Когда поток жив, как я могу остановить поток? Я дал как
if(thread.isAlive()){
thread.stop();
}
но метод stop устарел и бросает исключение
01-21 14:12:40.188: ERROR/global(535): Deprecated Thread methods are not supported.
01-21 14:12:40.188: ERROR/global(535): java.lang.UnsupportedOperationException
01-21 14:12:40.188: ERROR/global(535): at java.lang.VMThread.stop(VMThread.java:85)
01-21 14:12:40.188: ERROR/global(535): at java.lang.Thread.stop(Thread.java:1379)
01-21 14:12:40.188: ERROR/global(535): at java.lang.Thread.stop(Thread.java:1344)
Как мы можем это решить?
Ответы
Ответ 1
В общем, вы не принудительно останавливаете потоки, потому что это опасно. Вы устанавливаете флаг, который сообщает соответствующему потоку выйти из цикла потока в контролируемых условиях.
Ваша петля потока выглядит примерно так:
void run() {
while (shouldContinue) {
doThreadWorkUnit();
}
}
И где-нибудь еще вы установите переменную shouldContinue
и дождитесь завершения потока:
...
thread.shouldContinue = false;
thread.join();
...
(Все это, вероятно, не соответствует правилу Java, так как я не занимаюсь Java. Просмотрите его как псевдокод и измените для своей библиотеки языка/потока/и т.д.)
Ответ 2
Здесь, что люди Java должны сказать о том, почему бы не вызвать thread.stop и что делать вместо этого.
http://download.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
Короткий ответ: вы разрешаете возвращать функцию точки потока.
Ответ 3
Лучше использовать этот метод потока, чтобы остановить его.
Thread.interrupt();
Так что вы также можете сохранить состояние потока.
Ответ 4
В несингуляционной имплементации потоков вы всегда можете использовать что-то вроде этого в самом начале кода потока как:
void run() {
if (!shouldContinue) {
return 1;
}
..
then rest of the thread code
..
}