synchronized
synchronized是關鍵字
有以下三種使用方法:
-
靜態方法加上關鍵字 類
-
實例方法(也就是普通方法)加上關鍵字 方法
-
方法中使用同步代碼塊 代碼塊
有兩種加鎖方式:
-
鎖住類
-
鎖住對象實例
1 實現的是非公平鎖,鎖執行後會自動釋放。
2 使用synchronized,其它線程會一直等待下去,直至執行完。
lock
lock是一個接口 他是一個包含公平鎖和非公平鎖,包含多個接口,使用Lock必須手動釋放鎖。
Lock可以讓等待鎖的線程響應中斷,而synchronized不會,線程會一直等待下去。
通過Lock可以知道線程有沒有拿到鎖,而synchronized不能。
Lock能提高多個線程讀操作的效率。
嘗試獲取鎖 成功返回true 失敗返回false 這樣就可以檢驗是否已經鎖被釋放了
這個是trylock的重載方法,可以設置一個時間值 當到達這個時間 纔會返回true和false
也就是在參數範圍內,則不會立即返回值,會等待一段時間,這個時間就是傳入的具體參數值,在這個時間內獲取鎖成功,則依舊返回true;
當過了參數範圍後,還是獲取鎖失敗,則立即返回false。
還有就是
void unlock(); 需要執行完手動來釋放鎖。