您好,登錄后才能下訂單哦!
本篇內容介紹了“AbstractQueuedSynchronizer是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
AbstractQueuedSynchronizer抽象類
子類中獨自實現以下方法
* <li> {@link #tryAcquire} * <li> {@link #tryRelease} * <li> {@link #tryAcquireShared} * <li> {@link #tryReleaseShared} * <li> {@link #isHeldExclusively}
state狀態修改使用以下方法
{@link #getState}, {@link * #setState} {@link #compareAndSetState}:
Node{
// 表示節點狀態,CANCELLED,值為1 ,表示當前線程被取消 SIGNAL 值為-1,
//表示當前節點的后繼節點包含的線程需要運行,也就是unpark
// condition 值為-2 ,表示當前節點在等condition,也就是condition隊列中
// propagate,值為-3 ,表示當前場景下后續的acquireShared能夠得以執行;
//值為0,表示當前節點在sync隊列中,等待著獲取鎖
int waitStatus;
// 前驅節點,如取消當前節點,就需要完成連接
Node prev;
//后繼節點
Node next;
//存儲condition隊列中的后繼節點
Node nextWaiter;
//入隊列當前線程
Thread thread;
}
//獲取一個排他鎖
while(獲取鎖){
if(獲取到){
退出while循環
} else {
if(當前線程沒有入隊列){
那么入隊列
}
阻塞當前線程
}
}
}
}
// 釋放一個排他鎖
if(釋放成功){
刪除頭節點
激活原頭結點的后繼節點
}
“AbstractQueuedSynchronizer是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。