Почему 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() будет действительно безопасно. Например, вы должны проанализировать каждый возможный бит кода (включая основные и сторонние библиотеки), который использует поток. По умолчанию это делает его небезопасным.

Другие вопросы по тегам