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方法提供支持
總結
 
                            
                        - 上一篇: 分布式计算,网格计算和云计算的异同
- 下一篇: Graphics详解
