Почему синхронизируется метод start() Thread.java?

Насколько я понимаю, когда мы создаем Thread, мы используем новое ключевое слово. start() вызывается для нового объекта Thread каждый раз, когда мы хотим запустить Thread.

Это заставило меня задать вопрос: почему класс start() Thread в Java synchronized.

Нельзя запускать одну и ту же тему несколько раз.

dan1st 05.05.2024 09:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почему синхронизируется start() класса Thread в Java.

Вы не можете создать тему более одного раза. Но было бы еще хуже, если бы два потока одновременно попытались запустить один и тот же поток.

Почему?

Потому что это нарушит логику, которая не позволяет приложению запускать поток дважды!

Итак... они объявили start как synchronized, и неловкое состояние гонки удалось избежать.


Я думаю, вы предполагаете, что потоки всегда запускаются так:

new Thread(...).start();

но язык позволяет вам создать Thread в одном потоке и передать его в другой поток, который его запускает. Я не знаю, зачем это нужно делать, но я бы удивился, если бы кто-то это не попробовал.

Одним из примеров является перехватчик выключения, который вы можете зарегистрировать с помощью Runtime.addShutdownHook: вы передаете ему незапущенный поток, и при выходе среда выполнения запускает этот перехват выключения.

Mark Rotteveel 05.05.2024 11:18

Ах... конечно!

Stephen C 05.05.2024 11:19

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