0

Я знаю, что устарел использовать Thread.stop(), и я уже знаю альтернативные способы остановить поток. Но каковы прямые последствия Thread.stop() и что делает Thread.stop() настолько «опасным» ?.Последствия Thread.stop()

Если я вызову Thread.stop() в конце действия (onDestroy), это вызовет какие-либо проблемы (я хочу, чтобы поток немедленно обращался к объектам в моей деятельности)?

ТНХ & рассматривает

+3

Если вы еще не прочитали его, ознакомьтесь с http://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html –

+0

@ PM77-1 с этой ссылкой (good link Кстати): Следует отметить, что во всех ситуациях, когда поток ожидания не отвечает Thread.interrupt, он не отвечает на Thread.stop либо – rolfl

+1

. Функция 'stop()' для Android '[' throw new UnsupportedOperationException() '] (https://android.googlesource.com/platform/libcore/+/android-4.3_r2.2/luni/src/main/java/java/lang/Thread.java). Это не остановит поток или не повлияет на него каким-либо образом. – zapl

ответ

1

документация указывает на то, что Thread.stop() бросает исключение ThreadDeath, и что любые блоки, наконец, и любой код, который перехватывает/ловит ThreadDeath все равно будет работать. Если ваша цель - предотвратить доступ потока к объектам, то это не решение.

+0

Будет ли JVM убивать Thread, если он работает как демон, когда действие завершается? – user2224350

+0

Я не уверен. В pthreads, который, я считаю, является основной реализацией потоков Android, программа будет ждать завершения всех потоков до выхода из процесса. Поэтому я бы предположил, что вам нужно вручную завершить другие потоки. Но я не совсем уверен. – BinderNews

+0

@ user2224350 Нет, потому что завершение работы не останавливает процесс приложения. Темы будут продолжать работать до тех пор, пока система приложений не будет явно убита системой. И это случается редко, поскольку приложения предназначены для того, чтобы оставаться в живых в фоновом режиме как можно дольше, чтобы сократить время повторного запуска. Поэтому потоки Deamon практически бесполезны для Android. – zapl

1

Thread.stop() является опасным, поскольку он освобождает все заблокированные объекты. Это означает, что если объект является, например, обновлением массива, и он заблокировал его, так что другие потоки ждут завершения этого потока до использования массива, и вы вызываете Thread.stop(), тогда массив будет частично обновляться. Это может привести к ошибкам с отладкой в ​​других частях кода.

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