ReentrantLock原理  
   
所属分类 java
浏览量 1452
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 实现要点