Преимущества использования 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 в том, что они используют сравнение и развертку, которые работают лучше, особенно при низкой конкуренции.