Как лучше всего интерпретировать синхронизированное (это) ключевое слово в Java? - PullRequest
0 голосов
/ 31 марта 2020

Просто интересно, как лучше всего интерпретировать синхронизированное ключевое слово в Java? Я знаю, что он делает (проще говоря), он блокирует критическую секцию для доступа более чем одного потока, используя объект блокировки, который есть у каждого объекта. Так можно ли интерпретировать synchronized(this) как вызов метода, где возвращаемое значение synchronized это объект блокировки?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Представьте себе this - это ключ, а синхронизированный блок - это номер в отеле. Когда вы получите ключ, комната станет вашей, и никто другой не сможет войти в нее. Когда вы отдаете ключ, кто-то еще может получить ключ снова, чтобы войти в комнату.

synchronized само по себе ничего не возвращает. Это просто синтаксис для синхронизации потоков с помощью lock .

В нашем примере потоки будут гостями, синхронизированный блок будет гостиничным номером, а замок - ключом для комнаты. Любой объект может быть замком, а this является объектом.

0 голосов
/ 31 марта 2020

synchronized не возвращает никакого значения. synchronized(this) блокирует экземпляр this, т.е. объект блокировки равен this.

Обратите внимание, что блокировка на this считается плохой практикой кодирования.

...