Reentrantlock是基于AQS抽象类实现的,内部实现了两个队列,同步队列、条件队列
同步队列是双向链表,里面储存的是处于等待状态的线程,正在排队等待唤醒去获取锁,而条件队列是一个单向链表,里面储存的也是处于等待状态的线程,只不过这些线程唤醒的结果是加入到同步队列的队尾。
AQS所做的就是管理这两个队列里面线程之间的等待-唤醒的工作
独占模式和共享模式,区别就在于AQS在唤醒线程节点的时候是不是传递唤醒,分别对应独占锁和共享锁。ReentrantLock重写AQS的tryAcquire和tryRelease方法实现lock和unlock
ReentrantLock实现了lock接口,然后有三个内部类,Sync继承自AQS,另外两个fairSync和NonfairSync继承自sync,分别用来实现公平锁和非公平锁Reentranlock实现AQS的独占锁,是悲观锁
同步队列是双向链表,里面储存的是处于等待状态的线程,正在排队等待唤醒去获取锁,而条件队列是一个单向链表,里面储存的也是处于等待状态的线程,只不过这些线程唤醒的结果是加入到同步队列的队尾。
AQS所做的就是管理这两个队列里面线程之间的等待-唤醒的工作
独占模式和共享模式,区别就在于AQS在唤醒线程节点的时候是不是传递唤醒,分别对应独占锁和共享锁。ReentrantLock重写AQS的tryAcquire和tryRelease方法实现lock和unlock
ReentrantLock实现了lock接口,然后有三个内部类,Sync继承自AQS,另外两个fairSync和NonfairSync继承自sync,分别用来实现公平锁和非公平锁Reentranlock实现AQS的独占锁,是悲观锁
全部评论
相关推荐