摘要:
并发编程中,`ReentrantLock`的使用是比较多的,包括之前讲的`LinkedBlockingQueue`和`ArrayBlockQueue`的内部都是使用的`ReentrantLock`,谈到它又不能的不说AQS,AQS的全称是`AbstractQueuedSynchronizer`,这个类也是在`java.util.concurrent.locks`下面,提供了一个FIFO的队列,可以用于构建锁的基础框架,内部通过原子变量`state`来表示锁的状态,当`state`大于0的时候表示锁被占用,如果state等于0时表示没有占用锁,`ReentrantLock`是一个重入锁,表现在`state`上,如果持有锁的线程重复获取锁时,它会将`state`状态进行递增,也就是获得一个信号量,当释放锁时,同时也是释放了信号量,信号量跟随减少,如果上一个线程还没有完成任务,则会进行入队等待操作。 阅读全文