简介
Lock是一个功能接口
Lock接口最常见的实现是ReentrantLock<br>
通常情况下,Lock只允许一个线程来访问共享资源,不过有些时候一些特殊的实现也可以允许并发访问比如,ReadWriteLock里面的ReadLock<br>
Lock锁不会像Synchronized自动释放锁<br>
Lock方法不能被中断,一旦陷入死锁,就会陷入永久等待<br>
底层原理
调用lock方法,会先进行cas操作看下可否设置同步状态1成功,如果成功执行临界区代码
如果不成功获取同步状态,如果状态是0那么cas设置为1.
如果同步状态既不是0也不是自身线程持有会把当前线程构造成一个节点。
把当前线程节点CAS的方式放入队列中,行为上线程阻塞,内部自旋获取状态。
线程释放锁,唤醒队列第一个节点,参与竞争。重复上述。