关注
我自己记得笔记,网易面试也考了这道题
Synchronized的底层实现依赖于JVM,
在
HotSpot JVM实现中,锁有个专门的名字:对象监视器。
当多个线程同时请求某个对象监视器时,对象监视器会设置几种状态用来区分请求的线程:
Contention List:一个虚拟的队列,所有请求锁的线程将被首先放置到该竞争队列
Entry List:Contention List中那些有资格成为***的线程被移到Entry List,ContentionList
会被线程并发访问,为了降低对ContentionList队尾的争用
Wait Set:那些调用wait方法被阻塞的线程被放置到Wait Set
OnDeck:任何时刻最多只能有一个线程正在竞争锁,该线程称为OnDeck
Owner:获得锁的线程称为Owner
!Owner:释放锁的线程
具体实现方式是:新请求锁的线程将首先被加入到ConetentionList中,当某个拥有锁的线程(Owner状态)调用unlock之后,如果发现EntryList为空则从ContentionList中移动线程到EntryList,OnDeck线程获得锁后即变为owner线程,无法获得锁则会依然留在EntryList中
查看原帖
点赞 7
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 笔试 #
2344818次浏览 27317人参与
# 关于春招你都做了哪些准备? #
76013次浏览 493人参与
# 牛友故事会 #
503047次浏览 11541人参与
# 运营面经 #
94125次浏览 1173人参与
# 职业发展规划如何回答 #
31435次浏览 184人参与
# 机械人的offer怎么选 #
127705次浏览 731人参与
# 大城市找工作会更容易吗 #
7420次浏览 38人参与
# 担心入职之后被发现很菜怎么办 #
111867次浏览 695人参与
# 研究所笔面经互助 #
61356次浏览 416人参与
# 你上一次加班是什么时候? #
43154次浏览 303人参与
# 找工作有哪些冷知识 #
15366次浏览 196人参与
# 面试官是我前女友 #
93954次浏览 712人参与
# 谈薪时HR压价该怎么应对 #
189002次浏览 3029人参与
# 如何KTV领导 #
46315次浏览 367人参与
# 你最希望上岸的公司是? #
111293次浏览 616人参与
# CVTE工作体验 #
8713次浏览 20人参与
# 小米提前批笔试难吗 #
30627次浏览 338人参与
# 上班苦还是上学苦呢? #
210433次浏览 1278人参与
# 得物求职进展汇总 #
84323次浏览 757人参与
# 技术转行的心路历程 #
45638次浏览 651人参与