ReentrantLock實現同步

2021-08-07 10:23:08 字數 940 閱讀 2000

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,...