【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
ReentrantLock的核心是AQS,那么它怎么来实现的,继承吗?说说其类内部结构关系。
ReenTrantLock是实现Lock接口,内部有三个内部类 Sync ,NonFairSync ,FairSync ,后两个继承自Sync,而Sync继承自AQS ,NoFairSync是用来实现非公平锁,FireSync用来实现公平锁
ReentrantLock是如何实现公平锁以及非公平锁的?
公平锁是使用FairSync了,是直接使用aqs的acquire方法就好了,CLH队列为FIFO所以可以直接保证,具体可以看AQS实现。
非公平锁是使用NonFairSync.lock(),如果可以发现资源是空闲状态就直接占,不是空闲就尝试获取。
ReentrantLock默认实现的是公平还是非公平锁?
默认是非公平锁,实例化的时候传true时为公平锁(new ReenTrantLock(true))
来源:oschina
链接:https://my.oschina.net/u/4291478/blog/3142850