日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Monitor简介

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Monitor简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是Monitor?

1.Monitor是一種用來實現同步的工具

2.與每個java對象相關聯,即每個java對象都有一個Monitor與之對應

3.Monitor是實現Sychronized(內置鎖)的基礎

?

Monitor的基本結構是什么?

1.Owner字段:初始時為NULL表示當前沒有任何線程擁有該monitor record,當線程成功擁有該鎖后保存線程唯一標識,當鎖被釋放時又設置為NULL

2.EntryQ字段:關聯一個系統互斥鎖(semaphore),阻塞所有試圖鎖住monitor record失敗的線程

3.RcThis字段:表示blocked或waiting在該monitor record上的所有線程的個數

4.Nest字段:用來實現重入鎖的計數

5.HashCode字段:保存從對象頭拷貝過來的HashCode值(可能還包含GC age)

6.Candidate字段:用來避免不必要的阻塞或等待線程喚醒,因為每一次只有一個線程能夠成功擁有鎖,如果每次前一個釋放鎖的線程喚醒所有正在阻塞或等待的線程,會引起不必要的上下文切換(從阻塞到就緒然后因為競爭鎖失敗又被阻塞)從而導致性能嚴重下降;Candidate只有兩種可能的值0表示沒有需要喚醒的線程1表示要喚醒一個繼任線程來競爭鎖

參考:?Java中synchronized的實現原理與應用

?

Monitor與java對象以及線程是如何關聯的?

可以參考我前面的一篇文章:?java對象堆內存結構

1.如果一個java對象被某個線程鎖住,則該java對象的Mark Word字段中LockWord指向monitor的起始地址

2.Monitor的Owner字段會存放擁有相關聯對象鎖的線程id

?

Monitor具體是怎么實現的?

1.Monitor是在jvm底層實現的,底層代碼是c++

2.Monitor的enter方法:獲取鎖

3.Monitor的exit方法:釋放鎖

4.Monitor的wait方法:為java的Object的wait方法提供支持

5.Monitor的notify方法:為java的Object的notify方法提供支持

6.Monitor的notifyAll方法:為java的Object的notifyAll方法提供支持

總結

以上是生活随笔為你收集整理的Monitor简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。