ReentrantLock类

新增加了ReentrantLock类,可以达到synchronized同样的效果,并且支持嗅探锁定、多路分支通知等功能。使用ReentrantLock进行实例化,并使用lock,和unlock实现锁定和解锁。

Condition实现等待/通知

通过Condition可以实现“选择性通知”功能。await()实现的本质是让线程处于暂停状态,使用signal()方法(实现类似Object中notify()的
功能),使用await()方法,实现Object类中的wait()功能。可以使用不同的Condition,实现唤起不同Condition的线程。【注:在调用await之前需要先调用lock()获得锁】

公平锁与非公平锁

公平锁:线程获取锁的顺序是按照线程加锁的顺序来分配的
非公平锁:获取锁的抢占机制,是随机获得锁的
【注:在实现时,通过new ReentrantLock(fair)的方式来实现】

getHoldCount等方法

getHoldCount():查询当前线程保持此锁定的个数,调用lock()方法的次数
getQueueLength():返回正在等待获取此锁定的线程估计数
getWaitQueueLength(Condition):返回等待与此锁定相关的给定条件Condition的线程估计数量

isFair()等方法

isFair():判断是否是公平锁,默认情况下ReentrantLock类使用的是非公平锁
isHeldByCurrentThread():查询当前线程是否保持此锁定
isLocked():作用是查询此锁定是否由任意线程保持
lockInterruptibly():当前线程未被中断,则获取此锁定,如果已被中断则出现异常
tryLock():仅在没有被锁定的情况下才会执行锁定

ReentrantReadWriteLock类

ReentrantLock的效率比较低下,使用读写锁ReentrantReadWriteLock来提升方法的代码运行速度。(读锁之间不互斥,读锁与写锁互斥,写锁与写锁互斥)
通过lock.writeLock().lock()实现写锁
通过lock.readLock().lock()实现读锁