Кто-нибудь может объяснить разницу между этими двумя примерами в контексте блокировки объекта:
public void method1(){
synchronized(this){
....
}
}
И
StringBuffer aStringBufferObject = new StringBuffer("A");
public void method2(){
synchronized(aStringBufferObject){
....
}
}
Я знаю, что первый пример получит блокировку this
, а второй получит блокировку экземпляра aStringBufferObject. Но я действительно не понимаю, каков эффект или разница между ними.
Например, во втором примере будут ли потоки по-прежнему иметь возможность выполнять код внутри синхронизированного блока, потому что блокировка не связана с экземпляром this?
Я знаю, что синхронизация метода или блока код предотвращает одновременный доступ нескольких потоков к этому блоку / методу, но какова цель указания объекта для блокировки и в чем разница в способе указания объекта, как в приведенных выше примерах?