Почему Thread.stop() так опасен
Почему Thread.stop()
так опасно?
Почему целесообразно использовать Thread.interrupted()
вместо?
я знаю stop
устарела. Что еще делает его небезопасным?
Есть ли место, где я могу использовать stop
метод? Если да, приведите пример.
1 ответ
Почему Thread.stop() так опасен?
Проблемы подробно описаны здесь: http://download.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html
Почему лучше использовать Thread.interrupted()?
Так как Thread.interrupt()
позволяет целевому потоку прерывания отвечать, когда он достигает точки, когда он знает, что это безопасно.
Я знаю, что стоп не рекомендуется. Что еще делает его небезопасным?
Смотрите ссылку выше.
Есть ли место, где я могу использовать метод остановки? Если да, приведите пример.
Теоретически, если вы знали, что нить вы останавливали:
- никогда не обновлял структуры данных, используемые другими потоками,
- не использовал классы ожидания / уведомления или синхронизации более высокого уровня, или классы, которые зависели от них,
- и, возможно, несколько других вещей.
Например, я думаю, что было бы безопасно stop()
эта тема:
new Thread(new Runnable(){
public void run(){for (long l = 0; l > 0; l++){}}).start();
Тем не менее, в большинстве случаев это слишком сложно сделать анализ, чтобы выяснить, если вызов stop()
будет действительно безопасно. Например, вы должны проанализировать каждый возможный бит кода (включая основные и сторонние библиотеки), который использует поток. По умолчанию это делает его небезопасным.