深入簡出 synchronized和lock區別

synchronized 

synchronized是關鍵字

有以下三種使用方法:

  1. 靜態方法加上關鍵字                                                 類

  2. 實例方法(也就是普通方法)加上關鍵字                方法

  3. 方法中使用同步代碼塊                                             代碼塊

有兩種加鎖方式:

  1. 鎖住類

  2. 鎖住對象實例

1 實現的是非公平鎖,鎖執行後會自動釋放。

2 使用synchronized,其它線程會一直等待下去,直至執行完。

lock 

lock是一個接口 他是一個包含公平鎖和非公平鎖,包含多個接口,使用Lock必須手動釋放鎖。

Lock可以讓等待鎖的線程響應中斷,而synchronized不會,線程會一直等待下去。

通過Lock可以知道線程有沒有拿到鎖,而synchronized不能。

Lock能提高多個線程讀操作的效率。

 

嘗試獲取鎖 成功返回true 失敗返回false  這樣就可以檢驗是否已經鎖被釋放了

這個是trylock的重載方法,可以設置一個時間值 當到達這個時間 纔會返回true和false

也就是在參數範圍內,則不會立即返回值,會等待一段時間,這個時間就是傳入的具體參數值,在這個時間內獲取鎖成功,則依舊返回true;
當過了參數範圍後,還是獲取鎖失敗,則立即返回false。

還有就是 

void unlock();  需要執行完手動來釋放鎖。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章