Они оба используют встроенные замки. В вашем первом примере используется встроенный замок lock
, а второй - встроенный замок this
. Вопрос в том, действительно ли вы хотите заблокировать this
, чего часто нет.
Рассмотрите случай, когда вы используете synchronized(this)
внутри одного из ваших методов. У вас есть 2 объекта этого класса, и эти объекты ссылаются на один общий ресурс. Если вы заблокируете this
, то у вас не будет взаимной исключительности для этого ресурса. Вам нужно заблокировать какой-либо объект, к которому имеет доступ все доступное к ресурсу.
Блокировка на this
ТОЛЬКО, если важный ресурс является частью самого класса. Даже тогда в некоторых случаях объект блокировки лучше. Кроме того, если в вашем классе есть несколько разных ресурсов, которые не обязательно должны быть взаимоисключающими в целом, но индивидуально, тогда вам нужно несколько объектов блокировки.
Ключ должен действительно только знать, как synchronized работает, и помнить о том, что ваш код на самом деле делает
Они оба используют встроенные замки. В первом примере используется внутренняя блокировка 'lock', а вторая - внутренняя блокировка' this'. Вопрос в том, действительно ли это '' 'это то, что вы хотите заблокировать, что часто не является – Cruncher
. Я думаю, что http://stackoverflow.com/questions/442564 было бы очень полезно для вас. – kiruwka