Я чувствую, что для ответов нужно опубликовать несколько калибровок:
"Вы уверены, что никогда не захотите отменить это?"
Нет! Я не стал бы. Это все равно что сказать: «Вы уверены, что хотите объявить эту переменную частной?» Потому что, если бы я мог объявить любую переменную, которую я использую, как общедоступную, не опасаясь, что другие разработчики могут испортить мою логику проектирования, кодирование было бы легким делом. Одна из наиболее важных целей концепций OOPS, таких как Область видимости, абстракция, полиморфизм, обработка ошибок и т. Д., Состоит в том, чтобы сообщить другим разработчикам дизайн и намерения, стоящие за вашим кодом. Как указано в вопросе, когда вы переопределяете метод запуска, никто вас не заставляет использовать super.start (). @Codebender написал метод запуска потока без использования super.start (), и компилятор никогда не жаловался. Значит, он может сломать весь механизм Threading, а компилятор может просто позволить ему пройти? Метод запуска потока гарантирует, что метод запуска вызывается и выполняется в нужное время! Это очень важно для самой концепции Threading. Я был бы более чем счастлив, если бы я что-то здесь пропустил. 2.
Поскольку рекомендуемый способ создания запуска потока - это не создание подкласса Thread.
Хорошо, если кодовый бендер разрешен дизайном, чтобы подклассифицировать Thread и испортить метод запуска. По этой логике, дизайн стреляет себе в ногу. Согласно другому заявлению (с которым я полностью согласен), Runnable является рекомендуемым способом. Тогда почему мы вообще позволяем классу Thread создавать экземпляр потока без ограничений? Далее следуют:
Вы не можете заменить реализацию start () своей собственной реализацией,
Это на самом деле подтверждает утверждение codebender, что метод start должен быть окончательным, когда вы говорите это ... ^
Единственный действительный момент уже упоминается как побочное примечание, но это фактический ответ. на этот вопрос.
"Обратная совместимость".
Фактически, улучшения даже были внесены в JDK 5.0, когда они включали множество важных дополнений и уточнений в модель параллелизма Java. Мы хотим, чтобы обратная совместимость поддерживалась полностью, и именно поэтому класс Thread остается таким же, как и раньше, хотя в настоящее время рекомендуется использовать интерфейс Runnable.
Опять же, я был бы более чем счастлив, если бы меня поправили, если я что-то упустил.