欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java鎖的升級(jí)策略是什么-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“Java鎖的升級(jí)策略是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Java鎖的升級(jí)策略是什么”吧!

創(chuàng)新互聯(lián)建站于2013年成立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元策勒做網(wǎng)站,已為上家服務(wù),為策勒各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18980820575

這三種鎖是指鎖的狀態(tài),并且是專(zhuān)門(mén)針對(duì)Synchronized關(guān)鍵字。JDK 1.6 為了減少"重量級(jí)鎖"的性能消耗,引入了“偏向鎖”和“輕量級(jí)鎖”,鎖一共擁有4種狀態(tài):無(wú)鎖狀態(tài)、偏向鎖、輕量級(jí)鎖、重量級(jí)鎖。鎖狀態(tài)是通過(guò)對(duì)象頭的Mark Word來(lái)進(jìn)行標(biāo)記的:

鎖可以升級(jí)但不能降級(jí),意味著偏向鎖升級(jí)成輕量級(jí)鎖后不能降級(jí)成偏向鎖,這種鎖升級(jí)卻不能降級(jí)的策略,是為了提高獲得鎖和釋放鎖的效率

重量級(jí)鎖:依賴(lài)于底層操作系統(tǒng)的Mutex Lock,線(xiàn)程會(huì)被阻塞住

缺點(diǎn):加鎖和解鎖需要從用戶(hù)態(tài)切換到內(nèi)核態(tài),性能消耗較大

輕量級(jí)鎖:基于重量級(jí)鎖進(jìn)行了優(yōu)化(避免上下文切換,提高了性能),它假設(shè)多線(xiàn)程競(jìng)爭(zhēng)是互相錯(cuò)開(kāi)的,不會(huì)發(fā)生線(xiàn)程阻塞,呢么上下文切換就是多余的

第一個(gè)特點(diǎn):采用了CAS操作加鎖和解鎖,由于輕量級(jí)鎖的鎖記錄(Lock Record)是存放在對(duì)象頭和線(xiàn)程空間里的,因此加鎖和解鎖不需要上下文切換,性能消耗較小

第二個(gè)特點(diǎn):一旦發(fā)生多線(xiàn)程競(jìng)爭(zhēng),首先基于“自旋鎖”思想,自旋CPU循環(huán)等待一段時(shí)間,不會(huì)發(fā)生上下文切換,如果還是無(wú)法獲得鎖,就將鎖升級(jí)為重量級(jí)鎖

偏向鎖:基于輕量級(jí)鎖進(jìn)行了優(yōu)化(減少多次的加鎖和解鎖,提高了性能),它假設(shè)整個(gè)過(guò)程只有一個(gè)線(xiàn)程獲得鎖,呢么多次的加鎖和解鎖就是多余的

特點(diǎn):在第一次獲得鎖之后不會(huì)釋放鎖,它會(huì)一直持有鎖,后續(xù)進(jìn)入鎖時(shí)只需檢查一下鎖狀態(tài)和偏向線(xiàn)程ID是否為自己,從而省去了多次的加鎖和解鎖

1.偏向鎖

獲取鎖:

檢測(cè)對(duì)象頭的Mark Word是否為可偏向狀態(tài)(即是否為偏向鎖1,鎖標(biāo)志位是否為01),如果不是,嘗試競(jìng)爭(zhēng)鎖:嘗試CAS操作將Mark Word的線(xiàn)程ID設(shè)置為當(dāng)前線(xiàn)程ID,以表示線(xiàn)程獲得鎖,如果失敗說(shuō)明鎖已被占用

若為可偏向狀態(tài),則檢查線(xiàn)程ID是否為當(dāng)前線(xiàn)程ID,如果是則表示當(dāng)前線(xiàn)程已經(jīng)持有鎖(鎖的可重入),否則說(shuō)明鎖已被占用

如果鎖已被占用,只能撤銷(xiāo)偏向鎖為無(wú)鎖狀態(tài)或輕量級(jí)鎖

釋放鎖:(偏向鎖使用了一種等到競(jìng)爭(zhēng)出現(xiàn)才釋放鎖的機(jī)制,線(xiàn)程是不會(huì)主動(dòng)釋放偏向鎖的,只有當(dāng)其他線(xiàn)程競(jìng)爭(zhēng)偏向鎖時(shí),持有偏向鎖的線(xiàn)程才會(huì)釋放鎖)

偏向鎖的撤銷(xiāo)需要等待全局安全點(diǎn)(在這個(gè)時(shí)間點(diǎn)沒(méi)有正在執(zhí)行的字節(jié)碼),暫停擁有偏向鎖的線(xiàn)程,檢查持有偏向鎖的線(xiàn)程是否還活著

如果線(xiàn)程掛了,則將對(duì)象頭設(shè)置成無(wú)鎖狀態(tài);如果線(xiàn)程仍然活著,則將對(duì)象頭設(shè)置為輕量級(jí)鎖(鎖的升級(jí)),最終輕量級(jí)鎖一定會(huì)被釋放

2.輕量級(jí)鎖

獲取鎖:

檢測(cè)對(duì)象頭的Mark Word是否為輕量級(jí)鎖(鎖標(biāo)志位為00),如果不是,嘗試競(jìng)爭(zhēng)鎖:JVM首先在當(dāng)前線(xiàn)程的棧幀中建立一個(gè)鎖記錄(Lock Record),用于備份存儲(chǔ)對(duì)象頭的Mark Word(官方把這份拷貝加了一個(gè)Displaced前綴,稱(chēng)為Displaced Mark Word),然后JVM嘗試CAS操作將Mark Word更新為指向Lock Record的指針,以表示線(xiàn)程獲得鎖,如果失敗說(shuō)明鎖已被占用

若為輕量級(jí)鎖,判斷對(duì)象頭的Mark Word是否指向當(dāng)前線(xiàn)程的棧幀的Lock Record,如果是則表示當(dāng)前線(xiàn)程已經(jīng)持有鎖(鎖的可重入),否則說(shuō)明鎖已被占用

如果鎖已被占用,當(dāng)前線(xiàn)程便嘗試自旋CPU來(lái)獲取鎖,自旋一定次數(shù)后輕量級(jí)鎖會(huì)膨脹為重量級(jí)鎖(鎖標(biāo)志位變成10),線(xiàn)程進(jìn)入阻塞

釋放鎖:

嘗試CAS操作將Displaced Mark Word中替換回對(duì)象頭,如果成功,說(shuō)明輕量級(jí)鎖釋放成功

如果CAS操作失敗,說(shuō)明存在鎖競(jìng)爭(zhēng),鎖已經(jīng)膨脹成重量級(jí)鎖,需要在釋放鎖的同時(shí)喚醒那些被掛起的線(xiàn)程

3.重量級(jí)鎖

重量級(jí)鎖依賴(lài)于底層操作系統(tǒng)的Mutex Lock,所有線(xiàn)程都會(huì)被阻塞住,線(xiàn)程之間的切換需要從用戶(hù)態(tài)到內(nèi)核態(tài),切換成本非常高。

總結(jié):鎖的優(yōu)缺點(diǎn)對(duì)比

偏向鎖(Biased Lock)      加鎖和解鎖不需要額外的消耗,和執(zhí)行非同步方法相比僅存在納秒級(jí)的差距      如果線(xiàn)程間存在鎖競(jìng)爭(zhēng),會(huì)帶來(lái)額外的鎖撤銷(xiāo)      適用于只有一個(gè)線(xiàn)程訪(fǎng)問(wèn)              輕量級(jí)鎖(Lightweight Lock)      競(jìng)爭(zhēng)的線(xiàn)程不會(huì)阻塞,提高了程序的響應(yīng)速度      對(duì)于得不到鎖的線(xiàn)程,自旋會(huì)消耗CPU      追求響應(yīng)時(shí)間,或者要求臨界區(qū)簡(jiǎn)短,自旋不會(huì)占用CPU過(guò)久              重量級(jí)鎖(Heavyweight Lock)      線(xiàn)程競(jìng)爭(zhēng)不使用自旋,不會(huì)消耗CPU資源      線(xiàn)程阻塞,響應(yīng)時(shí)間緩慢      追求吞吐量


到此,相信大家對(duì)“Java鎖的升級(jí)策略是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁(yè)標(biāo)題:Java鎖的升級(jí)策略是什么-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://chinadenli.net/article38/hdpsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)商城網(wǎng)站App開(kāi)發(fā)企業(yè)網(wǎng)站制作移動(dòng)網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)

廣告

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

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