Я обнаружил еще одно преимущество использования 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
сравнивая оба кода, я вижу, что есть еще один недостаток в использовании синхронизированного блока, т.е. если в критической секции возникает исключение, снять блокировку невозможно.
Я прав ?
Поправьте меня, если я ошибаюсь, пожалуйста.
Можно ли снять блокировку, если в синхронизированном блоке возникает исключение?
synchronized
, вам не нужно делать это явно - person Nitin Dandriyal   schedule 14.05.2015ReentrantLock
мощнее, чемsynchronized
. Это делает его полезным в некоторых ситуациях, но также делает его опасным инструментом. Это полномочия; (а) вы можете отделить блокировку замка от его разблокировки (т. е. эти вещи могут происходить совершенно разными способами); и (b) вы можете связать две или более отдельных переменных условия с одной и той же блокировкой. Пункт (b) особенно актуален для приложений с несколькими производителями и несколькими потребителями. - person Solomon Slow   schedule 14.05.2015