java thread - почему разрешено останавливать новый поток

121
11

У меня есть вопрос для нижеследующих утверждений

Когда поток представляет собой новый поток, это просто пустой объект Thread. На это еще не выделены системные ресурсы. Когда поток находится в этом состоянии, вы можете только запустить поток или остановить его. Вызов любого метода, кроме запуска или остановки, когда поток находится в этом состоянии, не имеет смысла и вызывает IllegalThreadStateException.

Почему java позволяет остановить поток, который даже не запущен... в каком сценарии нужно будет вызвать stop() и новый поток?

спросил(а) 2013-11-14T14:05:00+04:00 6 лет, 11 месяцев назад
1
Решение
81

Прежде всего, не используйте функцию, отмеченную как deprecated.

Поскольку документация указывает на "Стоп",

Разрешено останавливать поток, который еще не запущен. Если поток в конечном итоге запущен, он немедленно прекращается.

Более того, если я посмотрю код для Stop который

 @Deprecated
public final void stop() {
// If the thread is already dead, return.
// A zero status value corresponds to "NEW".
if ((threadStatus != 0) && !isAlive()) {
return;
}
stop1(new ThreadDeath());
}

Как видно из кода, он разработан таким образом, что он возвращается нормально, когда threadStatus != 0 (значение состояния нуля соответствует состоянию "NEW"), или если поток уже остановлен.

ответил(а) 2013-11-14T14:31:00+04:00 6 лет, 11 месяцев назад
41

Другие ответы касаются специфики, поэтому я попытаюсь рассказать о более общей идее.

По сути, если разработчики не разрешают вызываемые методы, они пытаются обнаружить ошибки программирования. В представлении дизайнеров interrupt() вызывается, когда поток никогда не запускался, вероятно, был ошибкой, тогда как для stop() было меньше.


Есть и другие подобные примеры. Например, Future#cancel() можно вызвать несколько раз.

В конечном счете, я думаю, что есть элемент субъективности/предпочтения, хотя в некоторых случаях он имеет более четкий смысл, чем другой.

ответил(а) 2013-11-14T15:00:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема