ReentrantLock 是一种更经典的锁,和Synchronized属于并列关系
意味 “可重入锁” ,曾经主要使用ReentrantLock 后来随着Synchronized优化越做越好,优先使用Synchronized

ReentrantLock提供 lock() unlock()方法 实现加锁 和 解锁

和synchronized代码块不同 ReentrantLock 需要程序员自己写加锁 解锁代码
Synchronized与ReentrantLock的区别
1.区别1
synchronized 是关键字(内部实现是JVM 内部通过C++实现的)
ReentrantLock 是标准库的类(Java实现)
2.区别2
synchronized 通过代码块控制加锁解锁
ReentrantLock需要lock/unlock方法,需要注意unlock不被调用的问题
3.区别3
ReentrantLock 除了提供lock,unlock之外,还提供一个方法 trylock( )
- trylock() 不会阻塞!加锁成功返回true 加锁失败返回false 调用者判断返回值决定接下来咋做
- 可以设置超时时间,等到时间达到超时时间再返回ture/false
4.区别4
ReentrantLock 提供了 公平锁的实现
Synchronized是非公平锁
默认是非公平的 在构造方法参数中设置即可

5.区别5
ReentrantLock 搭配的等待通知机制,是Condition类 相比于wait notify来说功能更强大
319






