1. 程式人生 > 其它 >Synchronized和lock區別是什麼?

Synchronized和lock區別是什麼?

首先呢我們要知道:

synchronized是java中的一個關鍵字,而Lock是一個介面

 

 

 

synchronized的作用域是

  1. 用在某一個物件上,如:synchronized (this)
  2. 用在方法上,如:public synchronized void run() {}
  3. 用在上,如:synchronized (SynchronizeDemo.class) {}、public synchronized static void method() {}

lock只能給方法上鎖

注意:Lock要定義成static靜態全域性變數,而不能定義在這個方法裡面,這樣才能保證每個呼叫這個方法的執行緒用的是同一個鎖,才能保證程式碼同步執行

 

synchronized 不需要手動獲取鎖和釋放鎖,使用簡單,發生異常會自動釋放鎖,不會造成死鎖;

lock需要自己加鎖和釋放鎖,如果使用不當沒有unLock()去釋放鎖就會造成死鎖。

 

Lock更加靈活,裡面有很多的方法可以呼叫,例如tryLock(嘗試上鎖),lockInterruptibly(看看有沒有被中斷),lock(上鎖),unlock(釋放鎖)等方法

通過Lock可以知道有沒有成功獲取鎖,而synchronized卻無法辦到。

 

 

 

 還有就是Lock提供了公平鎖

  • 公平鎖:加鎖前先檢視是否有排隊等待的執行緒,有的話優先處理排在前面的執行緒,先來先得
  • 非公平所:執行緒加鎖時直接嘗試獲取鎖
    ,獲取不到就自動到隊尾等待。