什么是Java多線程鎖機(jī)制-創(chuàng)新互聯(lián)

小編這次要給大家分享的是什么是Java多線程鎖機(jī)制,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)專業(yè)提供網(wǎng)站制作、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站制作(企業(yè)站、成都響應(yīng)式網(wǎng)站建設(shè)公司、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!

上下文:程序運(yùn)行需要的環(huán)境(外部變量)

上下文切換:將之前的程序需要的外部變量復(fù)制保存,然后切換到新的程序運(yùn)行環(huán)境

系統(tǒng)調(diào)用:(用戶態(tài)陷入操作系統(tǒng),通過操作系統(tǒng)執(zhí)行內(nèi)核態(tài)指令,執(zhí)行完回到用戶態(tài))用戶態(tài)——內(nèi)核態(tài)——用戶態(tài):兩次上下文切換

線程wait()方法:將自身加入等待隊(duì)列,發(fā)生了一次上下文切換

notify()方法:將線程喚醒,也發(fā)生了上下文切換

Java線程中的鎖:偏向鎖、輕量級鎖、重量級鎖。

注意:偏向鎖和輕量級鎖都沒有發(fā)生競爭,重量級鎖發(fā)生了競爭。

偏向鎖:可重入和經(jīng)常使用某一個線程。

輕量級鎖:線程之間的切換,但是未發(fā)生競爭(在一個時間段只有一個線程使用)

重量級鎖:線程時間的競爭。

臨界區(qū):多個線程共享臨界區(qū),而且存在對臨界區(qū)的讀寫。

什么是Java多線程鎖機(jī)制

無所狀態(tài):hashcode 31位  年齡age:4位  是否是偏向鎖:block_lock:一位:0表示不是偏向鎖

偏向鎖:thread:54位 線程id  epoch 2位,作為批量重偏向的記錄  biased_lock:1 表示為偏向鎖

輕量級鎖:ptr_to_lock_record:62位  表示,鎖記錄的指針

重量級鎖:ptr_to_heavyweight_monitor :62位  表示monitor指針

輕量級鎖的流程:

什么是Java多線程鎖機(jī)制

鎖記錄有兩個指針:一個指向自身,一個指向lock對象,當(dāng)lock對象位state位01時,表示位輕量級鎖,此時執(zhí)行輕量級鎖的加鎖:交換lock record和markword

鎖重入:

什么是Java多線程鎖機(jī)制

同樣創(chuàng)建一個LockRecord  但此時cas失敗,因?yàn)榇藭rlock對象的markword為當(dāng)前鎖記錄的指針,置lockrecord指針為null,表示鎖重入,并且添加一個鎖重入計數(shù)器,記錄鎖重入的次數(shù)

解鎖:將LockRecord中的lockrecord(此時是markword)和lock對象(Object)中的markword(lockrecord指針)。如果解鎖失敗,那么輕量級鎖就會膨脹為重量級鎖。

重量級鎖的加鎖、解鎖、阻塞、喚醒:只有重量級鎖有阻塞

什么是Java多線程鎖機(jī)制

如上圖:當(dāng)發(fā)生競爭時,新的線程會將object修改為monitor指針,指向重量級鎖的monitor(管程),然后進(jìn)入等待隊(duì)列,當(dāng)當(dāng)前線程結(jié)束同步代碼塊,就會將owner置為0,此時表示沒有線程擁有此鎖,然后喚醒其他線程,其他線程就會競爭這個鎖。

偏向鎖的加鎖和解鎖:新的線程只需要判斷l(xiāng)ock對象的markword對象中的線程id是否是自己的id,如果是,那么就直接使用這個鎖。不用作cas交換,只有第一次獲得此鎖時需要用cas交換

調(diào)用hashcode可以撤銷偏向鎖,或者對同一個對象發(fā)生鎖同步時也會撤銷偏向鎖

偏向鎖重定向:對于一個類的多個實(shí)現(xiàn)類鎖對象,當(dāng)超過20次重定向時,后面該鎖的實(shí)例對象就變成了另外一個線程的偏向鎖

當(dāng)發(fā)生40次重定向時,該類的所有l(wèi)ock對象就變成了輕量級鎖。

看完這篇關(guān)于什么是Java多線程鎖機(jī)制的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。

文章題目:什么是Java多線程鎖機(jī)制-創(chuàng)新互聯(lián)
瀏覽地址:http://muchs.cn/article2/djigoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、營銷型網(wǎng)站建設(shè)、微信公眾號、關(guān)鍵詞優(yōu)化、網(wǎng)站營銷、品牌網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司