С
public class Example {
public void synchronized getCount() {
...
}
}
он синхронизируется на текущем объекте this
.Другой класс может получить ссылку на текущий объект и использовать ее в качестве блокировки монитора:
public class OtherClass {
public void otherMethod() {
Example example = new Example();
synchronized (example) {
...
}
}
}
Это может привести к неожиданным результатам, например, к блокировке getCount
при выполнении otherMethod
.
При первом подходе, поскольку блокировка монитора lockObject
является закрытой, другой класс не может получить к ней доступ напрямую, поэтому он предпочтительнее второго подхода.