ReentrantLock底层是由AQS实现的,ReentrantLock机制可以说是实打实的悲观锁。
来自:https://blog.csdn.net/qq_35688140/article/details/101223701
众所周知,ReentrantLock是一个悲观锁,但是查看源码,发现底层实现使用的是compareAndSet相关方法实现的,
于是产生疑问:为什么ReentrantLock使用的和CAS一样的compareAndSet相关的方法实现的,
CAS确实乐观锁,ReentrantLock却是悲观锁?
猜想一:仔细看代码发现ReentrantLock使用了setExclusiveOwnerThread方法,
这个方法是将某一个线程设置为独占线程。就是我们常说的互斥锁。
该线程占用该方法以后就无法被其他线程占有,也就是线程的互斥。
所以这不符合乐观锁的定义:“认为自己在使用数据时不会有别的线程修改数据”。
评论区:
ReentrantLock用的AQS,AQS用的cas判断线程是否获取到锁。
而不是ReentrantLock用的cas判断共享值有没有被改变。我是这么理解的