本文只對reentrantlock中獲取鎖和釋放鎖的方法進行分析,其它方法不做分析。
final void lock()
protected final boolean tryacquire(int acquires)
}else if (current == getexclusiveownerthread())
return false;
}}
final void lock()
protected final boolean tryacquire(int acquires)
//接下來檢視nonfairtryacquire方法是怎樣實現的
final boolean nonfairtryacquire(int acquires)
}//可重入的判斷,如果當前執行緒已經獲取鎖,那麼將state+1即可
else if (current == getexclusiveownerthread())
//加鎖失敗
return false;
}
public void unlock()
protected final boolean tryrelease(int releases)
//設定當前狀態值
setstate(c);
return free;
}
ReentrantLock實現同步
reentrantlock 也可以實現synchronized方法 塊的同步效果。reentrantlock 實現同步 如下 1 新建乙個service類 public class myservice public static void methodb 2 新建乙個測試類 public class...
ReentrantLock 以及 AQS 實現原理
reentrantlock是可重入鎖,什麼是可重入鎖呢?可重入鎖就是當前持有該鎖的執行緒能夠多次獲取該鎖,無需等待。可重入鎖是如何實現的呢?這要從reentrantlock的乙個內部類sync的父類說起,sync的父類是abstractqueuedsynchronizer 後面簡稱aqs aqs是j...
實現reentrantlock和讀寫鎖
1 可以手動實現乙個類似reentrantlock的工具,首先要維護乙個state的標誌,代表當前是否有執行緒已經使用資源。執行緒lock的時候,會用cas給state加1,其他執行緒檢測狀態。另外需要維護乙個等待佇列,爭奪不到資源的執行緒統一掛起 park 等執行緒unlock的時候,標誌減為0,...