91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

建阳市| 平邑县| 彭水| 名山县| 武邑县| 赞皇县| 闻喜县| 财经| 遂川县| 吕梁市| 达孜县| 横峰县| 郸城县| 贡山| 汤阴县| 新源县| 保靖县| 镇安县| 平阳县| 兴仁县| 皋兰县| 同江市| 邹城市| 格尔木市| 乌兰浩特市| 贵定县| 嵩明县| 镇康县| 三亚市| 安阳市| 涡阳县| 临猗县| 白水县| 遂溪县| 客服| 西林县| 公主岭市| 开鲁县| 文昌市| 垣曲县| 深圳市|