Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как по-настоящему остановить выполнение потока?


Автор: Cosmologist 9.2.2012, 13:15
Заметил такую штуку — когда пытаюсь остановить Thread (с помощью stop() или interrupt()) или AsyncTask (c помощью cancel(true)), код в потоке все равно продолжает выполняться!!!

Гугл предлагает решения типа — ставить флаг и в потоке постоянно этот флаг проверять, непонятно что делать если у меня выполняется одна долгая операция, код которой у меня отсутствует.

Действительно нельзя полностью остановить выполнение потока или это я что-то упустил? 

Автор: COVD 9.2.2012, 14:17
Нельзя. Ни полностью, ни частично. Если у вас нет кода и вы не можете вставить туда свои проверки условия остановки, то никак. Если только поток не ожидает ввода-вывода. В этом случае сработает interrupt(), потому что в стандартных классах уже реализована проверка флага interrupted. Если операция может выполняться настолько долго, что результат уже становится не нужен, то ее надо выполнять в отдельном потоке, чтобы не блокировать выполнение всей программы.

Автор: Cosmologist 9.2.2012, 14:28
COVD, спасибо, в процессе еще нашел обсуждение этой проблемы на хабре - http://habrahabr.ru/blogs/java/133413/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)