首页  

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