JUC的LOCK
简介:java.util.concurrent.locks.Lock 是一个类似于synchronized 块的线程同步机制。但是 Lock比 synchronized 块更加灵活。Lock是个接口,有个实现类是ReentrantLock。
与sychronized的区别:1.sLock则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象。2.lock可以配置公平策略,实现线程按照先后顺序获取锁。3.提供了trylock方法4.lock()和unlock()可以在不同的方法中执行,更灵活。
Lock接口: lock() unlock() tryLock() newCondition() lockInterruptibly()
Condition接口: await() signal() signalAll()
参考:https://www.cnblogs.com/lei-jun/p/16476739.html
AQS:Lock中的内部类,一个状态位status,0表示为加锁,1表示加锁,获取当前资源的线程引用,队列
调用lock方法,会先cas尝试获取锁,没获取到则进入队列,然后挂起,当获取当前资源的线程执行完毕后,会唤醒头节点。
AQS:https://blog.csdn.net/qq_42046105/article/details/102384342