2012-11-20 2 views
1

У меня есть поток, который работает в цикле и хотел бы убить поток после того, как диалог, который запустил поток, закрывается. Каков наилучший способ сделать это?Убить нить на диалоге Закрыть

+0

Какой тип диалога? Какой контекст? Пожалуйста, расскажите подробности, необходимые нам, чтобы дать разумный ответ. –

ответ

5

Вы можете позвонить по номеру interrupt(). Однако это не остановит поток, если вы не сделаете что-то в нем внутри цикла потока.

Thread t = new Thread() { 
    @Override 
    public void run() { 
     while (shouldLoop() && !isInterrupted()) { 
      . . . 
     } 
    } 
}(); 

// somewhere else: 
t.interrupt(); // will exit thread on next loop iteration 

Если вы не хотите использовать interrupt() (скажем, у вас нет ссылки на поток), вы можете установить флаг где-то есть доступ к коду потока. Вам все равно нужно проверить его в петле потока и выйти из цикла (и метода run()), чтобы выйти из потока.

+0

Что мне нужно делать в потоковом цикле? –

+0

@RyanNaddy - Вы должны написать цикл таким образом, чтобы он часто проверял 'isInterrupted()' (или какой-либо флаг, который вы используете) и завершает цикл, когда флаг становится установленным. –

+0

Я сделал это точно так же, как в примере, и, похоже, он правильно вышел из цикла. 'while (true &&! this.isInterrupted()) {' это то, что я использую. –

Смежные вопросы