文章目录
前言
接上一篇偏向锁的十连问,继续升级到重量级锁的进阶版,检验一下自己离精通重量级锁还有多远。建议在读之前了解下Java中重量级锁的实现原理。
-
重量级锁的ObjectMonitor和JUC中的AQS有什么异同
-
为什么ObjectMonitor需要cxq和entryList两个等待队列
-
cxq队列中等待线程,什么时候会进到EntryList
-
等待队列中多个线程,唤醒的顺序是什么
-
偏向锁和轻量级锁下线程是否可以wait和notify
-
cxq和waitset数据结构有什么区别
-
被唤醒的wait线程和其它等待线程,谁会先抢到锁
-
synchronized有类似AQS的公平锁/非公平锁逻辑吗
看了上面的问题,如果是胸有成竹,那就可以跳过这篇文章了。如果一脸问号,这篇文章应该对你有所帮助。
名词解释
首先明确下文章中用到的名词,防止引起误解。
等待队列,互斥锁实现中,当线程抢锁失败时,会被放入一个队列等待。当别的线程释放锁后会唤醒队列中的元素重新尝试抢锁,这个队列