Оператор синхронизации Java вокруг блокировки - PullRequest
2 голосов
/ 26 июня 2009

Мне было интересно, если

synchronize (lock) {
    ... 
}

Если блокировка является экземпляром java.util.concurrent.locks.Lock, обрабатывает lock как любой другой объект или как идиома попытки окончательной попытки, т.е.

 lock.lock(); 
 try {
     ... 
 } finally { 
    lock.unlock();
 }

Ответы [ 3 ]

13 голосов
/ 26 июня 2009

Документация по замку :

Обратите внимание, что экземпляры Lock просто нормальные объекты и сами могут быть используется в качестве цели в синхронизированном заявление. Получение блокировки монитора экземпляра Lock не указан отношения с использованием любого из методы lock () этого экземпляра. это Рекомендуется, чтобы избежать путаницы Вы никогда не используете экземпляры Lock в этом Кстати, кроме как в пределах своей осуществление.

Так что, по сути, он рассматривается как любой другой объект. И не делай этого.

3 голосов
/ 26 июня 2009

Будет обрабатывать блокировку так же, как и любой другой объект.

0 голосов
/ 07 августа 2011

Оператор блокировки на языке программирования C # может применяться для ограничения доступа к определенной части кода только для одного потока за раз.

...