网上关于锁的资料非常多,关于源代码分析的也非常多。但是这里我觉得依然有必要记录下自己的理解,或者从另一个角度再看看这个问题。本文是结合网上的参考资料以及jdk1.6的源代码进行的分析。
1、预定义的一些问题
(1) ReentrantLock的lock流程是什么样子的?
(2) ReentrantLock的unlock流程是什么样子的?
(3) ReentrantLock中的公平与非公平是什么意思,以及怎么实现的?
(4) 重入锁是什么概念?
下面开始进入正文,来直接分析下:
2、ReentrantLock的加锁流程图
这里没有明显区分(只有开始的地方有标注)ReentrantLock的公平与非公平的方式,先给出整体的流程图如下:
图1 锁流程图(图中的自旋阶段不确切,是有阻塞逻辑的)
从图1中,可以看到当一个线程抢锁,它有2种走向:成功,图中左侧的绿色部分的流向;失败,