2014-10-10 4 views
-1

Предположим, что поток получает реентер-блокировку на ресурсе несколько раз и умирает. Что будет с ресурсом? Может ли другой клиент получить доступ к ресурсу?Что произойдет, если поток получит 10 реентерабельных замков и штампов?

+0

Вы можете показать свой пример кода, который вы использовали для тестирования это и разъяснить нам, что вызывает путаницу? –

+0

Из любопытства я задал это сомнение. Поскольку блокировки в java поддерживают блокировку holdCount и освобождают блокировку после того, как holdCount достигнет нуля. –

+2

Это легко проверить: 'public void run() {sharedLock.lock(); вернуть; } ' –

ответ

0

Звучит как классический тупик для меня. Если замок не освобожден владельцем - он останется заблокированным навсегда и для всех.

2

Доказательство демонстрацией:

public static void main(String[] args) throws InterruptedException { 
    final ReentrantLock lock = new ReentrantLock(); 
    final Thread t = new Thread(()->lock.lock()); 
    t.start(); 
    t.join(); 
    System.out.println(t.isAlive()); 
    System.out.println(lock.tryLock()); 
} 

Он печатает

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