Преимущества использования 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

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

Я прав?

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

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

1 ответ

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

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

Другие вопросы по тегам