Означает ли, что каждое действие в каждой созданной нити синхронизируется?
No. Метод start
в новом потоке возвращается сразу после запуска новой нити. Затем вызывающий поток выходит из синхронизированного метода, поэтому блокировка синхронизации освобождается.
EDIT: Я вижу, вы редактировали вопрос, чтобы добавить цикл while (1)
. Я предполагаю, что вы имели в виду while (true)
BTW. Это меняет мое объяснение тем, что вызывающий поток никогда не покидает синхронизированный метод. Но ответа все равно нет. Как указывает Тило в комментарии ниже, новый поток не имеет никакого отношения к этой блокировке.
Вызывающий поток владеет блокировкой, созданной синхронизированным блоком. Пока этот поток выполняет код в рамках этого блока, он сохранит блокировку, и, таким образом, ни один другой поток не может войти в блок. В вашем примере создается новый объект потока и вызывается метод start
. Этот метод запускает выполнение потока, вызывая его метод run
, который выполняется в новом контексте потока. Поскольку это новый контекст потока, он считается вне области синхронизированного блока вызывающего потока. Таким образом, новый поток не блокируется, и новый поток не содержит никаких синхронизированных блоков кода по умолчанию.
Вы ** ** ** вне темы. –
Скомпилирует ли это? Откуда возникает IOException? Как '1' является логическим выражением? – Thilo
Обратите внимание, что 'while (1)' не будет компилироваться. По крайней мере, на Java. – EJK