亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么實現一個輕量級鎖

發布時間:2021-06-30 17:26:09 來源:億速云 閱讀:432 作者:Leah 欄目:大數據

Java中怎么實現一個輕量級鎖,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

當代碼進入同步塊的時候,如果同步對象沒有被鎖定,也就是Mark Word中鎖標志位為01。虛擬機首先會在當前線程的棧幀中創建一個名為鎖記錄的空間,用于存儲鎖對象目前的MarkWord的拷貝。下圖為拷貝后的線程堆棧和對象頭的信息。

然后,虛擬機將使用CAS操作嘗試將對象的Mark Word更新為指向Lock Record的指針。如果更新成功,那么這個線程就獲取了該對象的鎖,并且將象Mark Word的鎖標志位修改為00,這時該線程獲取的鎖就是輕量級鎖。此時線程堆棧與對象頭信息如下。

Java中怎么實現一個輕量級鎖

如果上述的更新操作失敗,虛擬機會先檢查對象的Mark Word是否指向當前線程的棧幀,如果是那就說明當前線程已經獲得了這個對象的鎖,那么虛擬機就可以直接執行同步代碼塊里的代碼了。如果不是則說明這個鎖對象已經被其他線程獲得了。如果有兩個以上的線程在爭用同一個鎖時,那么虛擬機會將輕量級鎖膨脹為重量級鎖,并將鎖標志的狀態值修改為10,Mark Word中存儲的鎖指針就會修改為重量級鎖的指針,后面等待獲得鎖的線程就要進入阻塞狀態。

上述的過程是線程獲得鎖的過程。下面我們看一下線程釋放鎖的過程。線程釋放鎖也是通過CAS操作完成的。當同步代碼塊中的代碼執行完成時,虛擬機就會檢查對象的Mark Word是否還在指向當前線程的鎖記錄,如果是,那么就用CAS操作把對象當前的Mark Word和線程中復制的Mark Word替換。如果替換成功,那么整個同步代碼塊執行完了,也就是鎖已經釋放了。如果替換失敗,那么就說明有其它線程嘗試獲取該鎖,那么就要在釋放鎖的同時,喚醒被掛起的其它線程。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹棱县| 务川| 郴州市| 南乐县| 宁安市| 宁蒗| 乌兰县| 东平县| 昌宁县| 芜湖市| 祥云县| 界首市| 汝南县| 儋州市| 香港| 凉山| 司法| 绥棱县| 和龙市| 北流市| 乐昌市| 湘潭县| 武穴市| 湖州市| 松阳县| 陈巴尔虎旗| 武城县| 屏东县| 库尔勒市| 镇康县| 东宁县| 琼结县| 信阳市| 赤峰市| 咸丰县| 锡林浩特市| 淮阳县| 车险| 鲁山县| 揭东县| 恭城|