我发现使用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
现在使用synchronized
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块还有一个缺点 即如果临界区发生异常,则无法释放锁。
我是对的吗?
如果我错了,请纠正我。
如果同步块中发生异常,是否有释放锁定?
答案 0 :(得分:0)
如果在synchronized块中发生异常,则仍会释放锁定。因此锁定将在所有情况下释放。
ReentrantLock的优势在于他们使用比较和扫描,特别是在低争用时表现更好。