ReentrantLock原理
| 锁重入原理 | 重入和自出都是通过state++--实现的 并且在tryRelease时有一个free来控制是否真的释放锁 |
|---|---|
不可打断原理: 确保其一定拿到锁 |
Acquire{ If(!tryAcquire && acquireQueue) //注意这里的穿透性 } 首先其会尝试获取tA, 获取失败后进入queue, 并且for(;;)来不断获取锁,并且在获取锁后返回是否被打断interrupted 是才会进入if的setInterrupt |
| 可打断原理 | 和不可打断不同的是, 可打断是检测到异常直接抛 |
非/公平锁原理: 检查aqs队列与否 |
非公平 无视排队的人
公平锁: 第一个节点是dummyNode, 检查当前存在第二个节点, 且第二个节点是当前线程
|
条件变量Condition原理 ConditionObject有两个指针: firstWaiter,lastWaiter |
|




