reentrantlock 也可以實現synchronized方法、**塊的同步效果。
reentrantlock 實現同步**如下:
1 新建乙個service類
public class myservice
public static void methodb()
}
2 新建乙個測試類:
public class test
};runnable runnableb = new runnable()
};thread threada = new thread(runnablea);
thread threadb = new thread(runnableb);
threadb.start();
threada.start();
}}
輸出結果:
方法a正在執行1
方法a正在執行2
方法a正在執行3
方法a正在執行4
方法a正在執行5
方法b正在執行1
方法b正在執行2
方法b正在執行3
方法b正在執行4
方法b正在執行5
如果去掉service類的所有lock.unlock(); 和 lock.lock(); 執行結果如下
方法b正在執行1
方法a正在執行1
方法b正在執行2
方法a正在執行2
方法b正在執行3
方法a正在執行3
方法b正在執行4
方法a正在執行4
方法b正在執行5
方法a正在執行5
可以看到在lock.lock();和lock.unlock(); 包圍的**是同步執行的。方法methoda和methodb的同步**公用乙個鎖 lock
ReentrantLock實現原理分析
本文只對reentrantlock中獲取鎖和釋放鎖的方法進行分析,其它方法不做分析。final void lock protected final boolean tryacquire int acquires else if current getexclusiveownerthread retu...
ReentrantLock 以及 AQS 實現原理
reentrantlock是可重入鎖,什麼是可重入鎖呢?可重入鎖就是當前持有該鎖的執行緒能夠多次獲取該鎖,無需等待。可重入鎖是如何實現的呢?這要從reentrantlock的乙個內部類sync的父類說起,sync的父類是abstractqueuedsynchronizer 後面簡稱aqs aqs是j...
實現reentrantlock和讀寫鎖
1 可以手動實現乙個類似reentrantlock的工具,首先要維護乙個state的標誌,代表當前是否有執行緒已經使用資源。執行緒lock的時候,會用cas給state加1,其他執行緒檢測狀態。另外需要維護乙個等待佇列,爭奪不到資源的執行緒統一掛起 park 等執行緒unlock的時候,標誌減為0,...