Condition总结-await和signal的总结
我把前面的整個(gè)分解的圖再通過一張整體的結(jié)構(gòu)圖來表述,線程awaitThread先通過lock.lock()方法獲取鎖成功后調(diào)用了condition.await方法進(jìn)入等待隊(duì)列,而另一個(gè)線程signalThread通過lock.lock()方法獲取鎖成功后調(diào)用了condition.signal或者signalAll方法,使得線程awaitThread能夠有機(jī)會(huì)移入到同步隊(duì)列中,當(dāng)其他線程釋放lock后使得線程awaitThread能夠有機(jī)會(huì)獲取lock,從而使得線程awaitThread能夠從await方法中退出執(zhí)行后續(xù)操作。如果awaitThread獲取lock失敗會(huì)直接進(jìn)入到同步隊(duì)列。
?阻塞:await()方法中,在線程釋放鎖資源之后,如果節(jié)點(diǎn)不在AQS等待隊(duì)列,則阻塞當(dāng)前線程,如果在等待隊(duì)列,則自旋等待嘗試獲取鎖
釋放:signal()后,節(jié)點(diǎn)會(huì)從condition隊(duì)列移動(dòng)到AQS
等待隊(duì)列,則進(jìn)入正常鎖的獲取流程
了解完Lock以及Condition之后,意味著我們對(duì)于J.U.C里面的鎖機(jī)制以及線程通信機(jī)制有了一個(gè)全面和深入的了解,接下來我們來看看其他比較常用的一些工具
?
總結(jié)
以上是生活随笔為你收集整理的Condition总结-await和signal的总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: reportInterruptAfter
- 下一篇: Condition总结-CountDow