ReentrantLock原理

image1
锁重入原理 重入和自出都是通过state++--实现的
并且在tryRelease时有一个free来控制是否真的释放锁

不可打断原理:

确保其一定拿到锁

Acquire{

If(!tryAcquire && acquireQueue) //注意这里的穿透性
setInterrupt

}

首先其会尝试获取tA, 获取失败后进入queue,

并且for(;;)来不断获取锁,并且在获取锁后返回是否被打断interrupted

是才会进入if的setInterrupt

可打断原理 和不可打断不同的是, 可打断是检测到异常直接抛

非/公平锁原理:

检查aqs队列与否

非公平 无视排队的人

image2

公平锁: 第一个节点是dummyNode, 检查当前存在第二个节点, 且第二个节点是当前线程

条件变量Condition原理

ConditionObject有两个指针:

firstWaiter,lastWaiter

image5