锁的释放流程-ReentrantLock.tryRelease
生活随笔
收集整理的這篇文章主要介紹了
锁的释放流程-ReentrantLock.tryRelease
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個方法可以認為是一個設置鎖狀態的操作,通過將state狀態減掉傳入的參數值(參數是1),如果結果狀態為0,就將排它鎖的Owner設置為null,以使得其它的線程有機會進行執行。
在排它鎖中,加鎖的時候狀態會增加1(當然可以自己修改這個值),在解鎖的時候減掉1,同一個鎖,在可以重入后,可能會被疊加為2、3、4這些值,只有unlock()的次數與lock()的次數對應才會將Owner線程設置為空,而且也只有這種情況下才會返回true。?
protected final boolean tryRelease(int releases){ int c = getState() - releases; if (Thread.currentThread() != getExclusiveOwnerThread()) throw new IllegalMonitorStateException(); boolean free = false; if (c == 0) { free = true; setExclusiveOwnerThread(null); } setState(c); return free; }?
總結
以上是生活随笔為你收集整理的锁的释放流程-ReentrantLock.tryRelease的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 锁的释放流程-ReentrantLock
- 下一篇: 锁的释放流程-unparkSuccess