Как остановить поток?

Когда поток жив, как я могу остановить поток? Я дал как

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. Просмотрите его как псевдокод и измените для своей библиотеки языка/потока/и т.д.)

Ответ 3

Лучше использовать этот метод потока, чтобы остановить его.

Thread.interrupt();

Так что вы также можете сохранить состояние потока.

Ответ 4

В несингуляционной имплементации потоков вы всегда можете использовать что-то вроде этого в самом начале кода потока как:

void run() {
    if (!shouldContinue) { 
       return 1; 
    } 
    .. 
    then rest of the thread code
    ..
 }