请教老师几个问题:
Q1:锁的状态是怎么定义的?或者说怎么知道锁的状态?
Q2:偏向锁的对象是指谁?
“偏向锁会尝试获取该对象的锁” ,此处的“对象”是指谁?
Q3:偏向锁的单线程问题:
“向锁是一种针对单线程访问的优化手段”,怎么知道是单线程?谁判断的?既然是单线程,为啥还要加锁?(如果是单线程,不用加锁啊,当然也不用加偏向锁了啊)。
Q4:偏向锁,两个线程可以同时进入同步代码块吗?
“如果不是,则查看对象标记是否为可偏向,如果是,则尝试使用 CAS 将当前线程的 ID 记录在对象头中,如果成功,则执行同步代码。”,前面的句子,好像一个线程已经进入同步代码块了,这一句好像是另外一个线程也可以进入,这样的话,就有两个线程同时进入同步代码块了。
Q5:复制到新的栈帧是什么意思?
“当有其他线程尝试获取同一对象锁,此时 Mark Word 复制到新建的栈帧作为 Displaced Mark Word”,什么意思?
Q6:老师能否多画几个图?
画图来演示,更清楚。
Q7:ReentrantLock的例子不明白
A 代码和文字没有说明该锁的特点。 B “我们还看到 ReentrantLock 支持公平锁和非公平锁两种模式”,哪里看到了?
Q8:ReentrantReadWriteLock的例子,只有一个线程来读,能体现什么?