0

我发现使用 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

通过比较这两个代码,我发现使用同步块还有一个缺点,即如果在关键部分发生异常,则无法释放锁。

我对吗 ?

如果我错了,请纠正我。

如果同步块中发生异常,是否有释放锁?

4

1 回答 1

0

如果同步块中发生异常,锁仍然会被释放。所以在任何情况下都会释放锁。

ReentrantLock 的优点是它们使用比较和扫描,特别是在低竞争时表现更好。

于 2015-05-14T06:31:23.973 回答