Преимущества использования ReentrantLock по сравнению с синхронизированным [дубликатом]

Я обнаружил еще одно преимущество использования ReentrantLock по сравнению с синхронизированным

Ниже код показывает, даже если исключение возникает в критической секции, блокировка снята (с использованием ReentrantLock )

void someMethod() {
     //get the lock before processing critical section.
   lock.lock();
   try 
   {
   // critical section 
   //if exception occurs
   }
   finally
   {
   //releasing the lock so that other threads can get notifies
   lock.unlock();
   }
}//end of method

Теперь с помощью синхронизированного

void someMethod() {
     //get the lock before processing critical section.
  synchronized(this) 
  {
    try 
    {
    // critical section 
    //if exception occurs
    }
    finally
    {
    //I don't know how to release lock

    }
  }

}//end of method

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

Я прав ?

Поправьте меня, если я ошибаюсь, пожалуйста.

Можно ли снять блокировку, если в синхронизированном блоке возникает исключение?


person Javed Solkar    schedule 14.05.2015    source источник
comment
Итак, если исключение возникает в середине синхронизированного блока, блокировка снимается. верно? (согласно ссылке, которую вы мне дали) @s.bandara   -  person Javed Solkar    schedule 14.05.2015
comment
Внутренняя блокировка будет снята после выполнения закрывающей скобки блока synchronized, вам не нужно делать это явно   -  person Nitin Dandriyal    schedule 14.05.2015
comment
@JavedSolkar, правильно!   -  person s.bandara    schedule 14.05.2015
comment
@s.bandara Хорошо, я понял   -  person Javed Solkar    schedule 14.05.2015
comment
Голосование за повторное открытие, потому что в другом вопросе ничего не говорится о Преимуществах ReentrantLock. ReentrantLock мощнее, чем synchronized. Это делает его полезным в некоторых ситуациях, но также делает его опасным инструментом. Это полномочия; (а) вы можете отделить блокировку замка от его разблокировки (т. е. эти вещи могут происходить совершенно разными способами); и (b) вы можете связать две или более отдельных переменных условия с одной и той же блокировкой. Пункт (b) особенно актуален для приложений с несколькими производителями и несколькими потребителями.   -  person Solomon Slow    schedule 14.05.2015


Ответы (1)


Если в синхронизированном блоке возникает исключение, блокировка все равно будет снята. Таким образом, блокировка будет снята при любых обстоятельствах.

Преимущество ReentrantLock заключается в том, что они используют сравнение и развертку, которые работают лучше, особенно при низкой конкуренции.

person akhil_mittal    schedule 14.05.2015