Синхронизированные методы в Java - PullRequest
12 голосов
/ 01 сентября 2011

Просто хотел проверить, чтобы убедиться, что я это понимаю.Синхронизированный метод не создает поток, верно?Это только гарантирует, что никакой другой поток не вызывает этот метод, пока один поток в том же процессе (то есть JVM) использует его, верно?

Ответы [ 3 ]

21 голосов
/ 01 сентября 2011

Синхронизированный метод не создает поток, верно?

правый.

Это только гарантирует, что никакой другой поток не вызывает этот метод, пока один поток внутри того же процесса (то есть JVM) использует его, верно?

правый.

Для получения дополнительной информации прочитайте Синхронизированные методы . Я также рекомендую прочитать Параллелизм Java на практике .

3 голосов
/ 01 сентября 2011

Да.

Существует и другая важная роль для синхронизированных блоков: когда поток входит в синхронизированный блок, он видит изменения в значениях, внесенных предыдущим потоком, который обращался к этому блоку (или другому блоку, синхронизированному с той же блокировкой).

В основном для многоядерного процессора, каждый поток имеет свой собственный кэш памяти на своем ядре: каждое ядро ​​имеет копии одинаковых переменных, их значения могут быть разными на каждом ядре. При выполнении синхронизированной операции JVM обеспечивает копирование значений переменных из одного кэша памяти в другой. Затем поток, входящий в синхронизированный блок, видит значения, «обновленные» предыдущим потоком.

Как предполагает mre, Java Concurrency in Practice - хороший справочник, если вы действительно хотите понять многопоточность и изучить лучшие практики.

3 голосов
/ 01 сентября 2011

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

Главное, что нужно помнить, это то, что все синхронизированные методы класса используют один и тот жеблокировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...