2015-05-17 3 views
1
void method1() { 
    synchronized(this) { // Acquires intrinsic lock 
     method2(); 
    } 
} 

void method2() { 
    synchronized(this) {} // Acquires same lock due to Reentrant synchronization 
} 

Первый тайм-ключ, полученный в методе 1, который вызывает синхронизированный метод2, где второй раз он получает ту же блокировку.Реинтеграция Синхронизация - разблокировка вызванного синхронизированного метода

Теперь я сомневаюсь, что когда синхронизированный блок заканчивается в методе2(), разблокировка происходит здесь в первый раз и возвращается к синхронизированному блоку метода1(), где снова разблокировка происходит во второй раз.

Он внутренне управляет количеством замков, как в ReentrantLock?

ответ

1

Он внутренне управляет количеством замков, как в ReentrantLock?

Да. От JLS section 17.1 - акцент мой.

Язык программирования Java предоставляет множество механизмов для обмена данными между потоками. Основным из этих методов является синхронизация, которая реализуется с использованием мониторов. Каждый объект в Java связан с монитором, который поток может блокировать или разблокировать. Только один поток за раз может удерживать блокировку на мониторе. Любые другие потоки, пытающиеся заблокировать этот монитор, блокируются, пока они не смогут получить блокировку на этом мониторе. Нить t может блокировать определенный монитор несколько раз; каждая разблокировка отменяет действие одной операции блокировки.

1

Да внутренне jdk отслеживает повторный вход.

По оракула документы:

Напомним, что поток не может получить блокировку, принадлежащую другому потоку. Но нить может приобрести блокировку, которой она уже владеет. Разрешить потоку получать один и тот же замок более одного раза, обеспечивает повторную синхронизацию. Это описывает ситуацию, когда синхронизированный код, прямо или косвенно, вызывает метод, который также содержит синхронизированный код, и оба набора кода используют одну и ту же блокировку. Без повторной синхронизации синхронизированный код должен принять много дополнительных мер предосторожности, чтобы избежать блокировки потока.

this См подробности.

Смежные вопросы