ReentrantLock實現原理分析

2021-10-02 16:32:13 字數 815 閱讀 4265

本文只對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,...