隊列同步器AbstractQueuedSynchronizer源碼解析-續(xù)1

此續(xù)文將介紹獨占模式下中斷獲取以及中斷超時獲取同步狀態(tài)的原理

1. LockSupport.park(Object blocker)

阻塞caller線程,注意這時線程狀態(tài)為Waiting而不是Blocked,所以并發(fā)包里凡是通過AQS來使線程等待的都是會使得線程變?yōu)閃aiting狀態(tài)或者Time_Waiting狀態(tài);LockSupport實現(xiàn)機制和Sychrongzied對象同步器機制不同,Object.norify/notifyAll并不會喚醒通過 LockSupport.park等待的線程。

image.png

這個方法遇到如下三種情況會讓LockSupport.park等待的線程喚醒返回

  • Some other thread ** invokes unpark** with the current thread as the target;
  • Some other thread interrupts the current thread;其他線程中斷此線程
  • he call spuriously (that is, for no reason) returns.

所以當阻塞的線程發(fā)生中斷時會立刻從LockSupport.park返回

2. acquireInterruptibly

與acquire相同,但是該方法響應中斷,并拋出中斷異常

下面是方法詳解

acquireInterruptibly

注意第一步是先預判是否線程已經(jīng)被中斷了,如果還沒有開始嘗試獲取鎖就已經(jīng)被中斷了則直接重置中斷狀態(tài)并拋出中斷異常
image.png
doAcquireInterruptibly
image.png

3. tryAcquireNanos

是帶有超時限制的acquireInterruptibly方法

下面是方法詳解

tryAcquireNanos
image.png
doAcquireNanos
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 一個簡單的單例示例 單例模式可能是大家經(jīng)常接觸和使用的一個設計模式,你可能會這么寫 publicclassUnsa...
    Martin說閱讀 2,269評論 0 6
  • 第三章 Java內(nèi)存模型 3.1 Java內(nèi)存模型的基礎 通信在共享內(nèi)存的模型里,通過寫-讀內(nèi)存中的公共狀態(tài)進行隱...
    澤毛閱讀 4,384評論 2 22
  • 她美,美的天生麗質(zhì)自難棄,她媚,媚的回眸一笑百媚生。世人皆言她是紅顏禍水,因了她,那大唐盛世狼煙四起,繁華不再。 ...
    l七卡l閱讀 457評論 4 4
  • 我用很長一段時間養(yǎng)成了一個習慣就是無論路邊的誰在發(fā)什么樣的廣告紙我都會輕輕的接過來掃一眼哪怕走遠了再扔到垃圾箱里 ...
    禮雪晶閱讀 389評論 2 15
  • 輕輕的,將往昔拾起, 看見清晰的自己, 仿佛身體還停留在那里! 慢慢的,將沉淀拾起, 看著今天的自己, 仿佛思想還...
    秀秀王子閱讀 220評論 0 0