
ABS
ReentrantLock是通过
ABStractQueuedSynchronizer同步器实现的锁。它和基于JVM实现的synchronized锁不一样,有着更多的灵活性。像ReentrantLock的加锁、解锁操作都得手动完成。并且它还具备如下特性:在
Java.util.concurrent类库中,有Condition类用于实现线程间的协调。线程可通过调用Condition.aw
AIt()方法进入等待状态,而其他线程调用Condition.signal()或者Condition.signalAll()方法时,就能将处于等待状态的线程唤醒。调用Condition的aw
AIt()与signal()方法时,这两个操作都得处于lock保护范围之内。ReentrantLock包含三个内部类,即Sync、F
AIrSync和NonF
AIrSync。Sync继承自
ABStractQueuedSynchronizer,而Sync又被F
AIrSync和NonF
AIrSync所继承。
公平锁与非公平锁:获取锁时,是否要等阻塞队列无线程了才去抢锁。若CLH阻塞队列有线程就直接抢锁,这就是非公平锁。
可重入锁:获取锁时,若锁已被占用,会判断是否为当前线程,若是,则让state再加1,然后执行业务逻辑。