- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- 總結java多線(xiàn)程之互斥與同步解決方案
互斥:指的是多個(gè)線(xiàn)程不能同時(shí)訪(fǎng)問(wèn)共享變量
同步:指的是多個(gè)線(xiàn)程按指定的順序執行操作
在同時(shí)有多個(gè)線(xiàn)程運行過(guò)程中,如何達到互斥和同步呢?
在此使用黑馬筆記中room例子來(lái)說(shuō)明鎖。(ps: 以前就了解鎖,但總會(huì )記亂,發(fā)現使用形象化記憶后就很清楚)
解決互斥
解決同步
(這涉及到為什么wait(),notify()方法需要用鎖,就是因為只有用了鎖才能完成同步,那么怎么完成的呢?)
那么room這個(gè)數據結構其實(shí)就是synchronized的核心了,接下來(lái)總結synchronized原理的時(shí)候會(huì )一直用room的例子
很多人對synchronized原理的理解也就停留在知道字節碼有個(gè)monitor關(guān)鍵字來(lái)管理鎖,再淺一點(diǎn)的只知道怎么用,再者懂得深一點(diǎn)的卻記不住。我之前就是想深入了解一下但覺(jué)得苦澀,就看不下去了,看了黑馬的筆記我覺(jué)得這玩意兒其實(shí)很簡(jiǎn)單,所以好的老師還是比較重要的。那么在此我也記錄一下怎么更好的去理解synchronized的底層原理
從字節碼我們可以知道synchronized的底層就是關(guān)聯(lián)了一個(gè)monitor,那么這玩意兒是個(gè)什么東西,怎么實(shí)現鎖的功能呢?
首先,可以把monitor的數據結構簡(jiǎn)化成上圖的room,具體點(diǎn)描述如下圖
以上就是synchronized的原理。有人就會(huì )問(wèn)了,你說(shuō)的這些文字我都懂啊,搞個(gè)圖擺在這也沒(méi)啥用。
接下來(lái)我將從上圖直接回答下面的常見(jiàn)的問(wèn)題
wait()和notify()為什么都得在synchronized后使用?
wait()會(huì )釋放鎖嗎?
notifyALL()為什么不會(huì )喚醒其他鎖對象的線(xiàn)程?
說(shuō)說(shuō)synchronized的原理?
線(xiàn)程什么時(shí)候從runnable變成waiting,什么時(shí)候變成block?
注意了,這里涉及monitor的原理都是synchronized最根本的原理,也稱(chēng)重量級鎖,可以看到monitor會(huì )頻繁切換線(xiàn)程狀態(tài),效率比較低。后來(lái)synchronized改進(jìn)了,在使用monitor前還有好幾種方案,分別為偏向鎖,輕量鎖,以及自旋優(yōu)化。這部分也是面試??键c(diǎn),也容易記亂,但用圖例去記就很清楚。
那么接下來(lái)就說(shuō)說(shuō)synchronized的改進(jìn)
輕量鎖與偏向鎖的核心都是先不讓線(xiàn)程沖突的時(shí)候直接去找monitor,而是先用鎖對象的對象頭字段來(lái)解決沖突
(寫(xiě)博客好累啊。。。算了我就總結一些自己覺(jué)得關(guān)鍵的地方吧)
輕量鎖
偏向鎖
到此這篇關(guān)于總結java多線(xiàn)程之互斥與同步解決方案的文章就介紹到這了,更多相關(guān)java多線(xiàn)程之互斥與同步內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站