公平锁与非公平锁源码对比
生活随笔
收集整理的這篇文章主要介紹了
公平锁与非公平锁源码对比
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
語義:
1.公平鎖:每個線程在獲取鎖的時候,會先檢查該鎖維護的等待隊列,如果該隊列是空或者當前線程是第一個,則占有鎖,否則按照FIFO的原則,進入等待隊列,等待獲取鎖;
2.非公平鎖:當前線程在獲取鎖的時候,不管該鎖的維護隊列種是否有其它等待線程,直接CAS,如果cas失敗,則再執行公平鎖的那一套;
?
源碼比較如下:
公平鎖:
?
final void lock() {acquire(1);}?
?
非公平鎖:
final void lock() {if (compareAndSetState(0, 1)) //先嘗試獲取鎖setExclusiveOwnerThread(Thread.currentThread());elseacquire(1);//獲取鎖失敗,再采用公平鎖的方式;}?
?
?
?
關于鎖的釋放,公平鎖與非公平鎖是一樣的:
public final boolean release(int arg) {if (tryRelease(arg)) {Node h = head;if (h != null && h.waitStatus != 0)unparkSuccessor(h);return true;}return false;}?
?
關于公平鎖與非公平鎖的更底層的一些東西,比如volatile的使用,因為涉及到native方法,暫時沒有深究。
?
轉載于:https://www.cnblogs.com/zqsky/p/7899195.html
總結
以上是生活随笔為你收集整理的公平锁与非公平锁源码对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 认识微软Visual Studio To
- 下一篇: A股大飞机板块有哪些股票 这几家都是非常