并发编程 - ReentrantLock
ReentrantLock
对于锁的获取分为公平模式和非公平模式。默认是非公平模式。可由构造器参数来指定。对于tryLock()方法,ReentrantLock只使用了非公平模式。除此之外,也提供了响应中断、超时等功能。
非公平模式
获取锁
-
tryLock() : 尝试获取锁,如果获取成功返回true,如果获取失败直接返回false。
-
lock() : 获取锁。
对于锁的获取成功与否的判定,使用cas方式。获取失败,执行acquire(…)方法。
acquire(…)的其他方法属于AQS的方法,这里不再叙述。参考AQS文章
公平模式
获取锁
- lock() 获取锁
与非公平模式不同的是,公平模式有hasQueuedPredecessors()方法。
判断在等待队列中是否有前驱节点在排队。(头节点有后继节点,该后继节点的线程不是当前线程。)
响应中断
该方法是AQS方法,tryAcquire(…)上面有说,也分为公平模式和非公平模式,这里不再叙述。参考AQS文章
超时
该方法是AQS方法,tryAcquire(…)上面有说,也分为公平模式和非公平模式,这里不再叙述。参考AQS文章
释放锁
- unlock() : 释放锁
如果成功释放锁,唤醒后继节点。
对同步状态减一,如果为0,设置exclusiveOwnerThread为null。