Java中ReentrantLock和Synchronized的區別


有多種方法可以使多個執行緒對共享資源加鎖。一種是可重入鎖 (Reentrant Lock 或 ReadWriteLock),另一種是使用Synchronized方法。

ReentrantLock類從Java 5開始在Java併發包中提供。

它是Lock介面的實現,根據Java文件,Lock介面的實現提供了比使用synchronized方法所能獲得更廣泛的操作。

序號關鍵點ReentrantLockSynchronized
1
獲取鎖
Reentrant lock類提供lock()方法,用於執行緒獲取共享資源的鎖
只需要編寫synchronized關鍵字即可獲取鎖
2
釋放鎖
要釋放鎖,程式設計師必須呼叫unlock()方法
這是隱式完成的
3
中斷能力
可以使用lockInterruptibly()方法中斷執行緒
無法中斷執行緒
4
公平性
此類的建構函式具有公平性引數。如果將其設定為true,則鎖傾向於向等待時間最長的執行緒授予訪問許可權
* 執行緒
鎖不保證任何特定的訪問順序
5
鎖釋放順序
鎖可以以任何順序釋放
鎖應按獲取它們的順序釋放

ReentrantLock示例

public class ReentrantLockExample implements Runnable{
   private Lock lock=new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //Lock some resource

      }
      catch (InterruptedException e) {
         e.printStackTrace();
      }
      finally {
         lock.unlock();
      }
   }
}

Synchronized鎖示例

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      synchronized (resource) {
         //Lock some resource
      }
   }
}

更新於:2019年11月18日

2K+ 次檢視

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.