ReentrantLock 和 Synchronized 的区别
1. ReentrantLock 可以替代 Synchronized。
2. ReentrantLock 的底层是用 CAS 实现的,Synchronized 的底层是一个锁升级的过程:New ---> 偏向锁 --> 轻量级锁(乐观锁、自旋锁、自适应自旋锁)--> 重量级锁。
3. ReentrantLock 中有 tryLock() 方法,如果不能获取锁怎么办?
4. ReentrantLock 中有 lockInterruptibly() 方法,可以被打断。
5. ReentrantLock 中可以指定公平锁,Synchronized 只有非公平锁。
private static ReentrantLock lock = new ReentrantLock(true); // 参数为true表示为公平锁
公平锁和非公平锁的详解:https://www.imooc.com/article/302143