Синхронизированные потоки и блокировка

Кто-нибудь может объяснить разницу между этими двумя примерами в контексте блокировки объекта:

public void method1(){
    synchronized(this){
        ....
    }
}

И

StringBuffer aStringBufferObject = new StringBuffer("A");

public void method2(){
    synchronized(aStringBufferObject){
        ....
    }
}

Я знаю, что первый пример получит блокировку this , а второй получит блокировку экземпляра aStringBufferObject. Но я действительно не понимаю, каков эффект или разница между ними.

Например, во втором примере будут ли потоки по-прежнему иметь возможность выполнять код внутри синхронизированного блока, потому что блокировка не связана с экземпляром this?

Я знаю, что синхронизация метода или блока код предотвращает одновременный доступ нескольких потоков к этому блоку / методу, но какова цель указания объекта для блокировки и в чем разница в способе указания объекта, как в приведенных выше примерах?

8
задан Chris Martin 4 November 2014 в 06:09
поделиться