ReentrantLock原理
所属分类 java
浏览量 1012
AQS AbstractQueuedSynchronizer 用来构建锁和同步工具的框架
包括常用的 ReentrantLock CountDownLatch Semaphore等
Lock接口
CAS+AQS
Lock lock = new ReentrantLock();
lock.lock();
try{
// do something
}finally{
lock.unlock();
}
ReentrantLock 与 synchronized
ReentrantLock更灵活强大,除了常规的lock()、unlock()之外,
还有lockInterruptibly() tryLock()方法,支持中断 超时
支持 公平锁和非公平锁
公平锁 线程获取锁的顺序和调用lock的顺序一样,FIFO
通过CAS尝试获取锁,获取失败,那就加入AQS队列且挂起
当锁被释放之后,排在CLH队列队首的线程会被唤醒
如果同时还有另一个线程尝试获取锁
非公平锁 有可能会被这个线程抢先获取
公平锁 当它发现自己不在队首,排到队尾,队首线程获取到锁
AQS要点整理
AQS同步队列与条件队列
The java.util.concurrent Synchronizer Framework 翻译
LockSupport简介
上一篇
下一篇
Stack ArrayDeque LinkedList
java线程状态及转换
LockSupport简介
基于 wait 和 notifyAll 实现简单的阻塞队列
基于 ReentrantLock Condition await signalAll 实现简单的阻塞队列
Synchronized 和 AQS 实现要点