目录
1. 可重入锁
ReentrantLock翻译过来其实就是可重入锁,那么什么是可重入锁?简单来说,就是一把锁重复使用。
- 以下就是一个可重入锁的机制,lock1.lock()已经获取到了lock1对象的锁,那么while里的lock1.lock()可以自动备货区,一把锁重复使用。
- 这样的好处是什么?
答:避免堵塞,提高效率,我们接下来解释一下为什么有这两个好处。
避免堵塞:lock1.lock()获取lock1对象的锁,while1中的lock1.lock()也是尝试获取lock1对象的锁,但是lock1对象的锁已经在上面被获取了,所以这个程序会一直阻塞在这里,但是有了可重入锁,这里不再需要获取这个锁了,直接往下运行。
提高效率:拿一把锁,只要没有unlock释放,可以重复使用,不需要一直获取同一把锁。
但是记住,可重入锁机制针对的是同一把锁,也就是同一个对象的锁,下面这种和可重入锁的机制就没什么关系了
2. ReentrantLock源码分析
2.1. 获取锁成功
默认使用的是非公平锁,可以通过参数修改new ReentrantLock(true)
再往下执行
我们发现,lock的底层是用CAS实现的&