为什么已经有synchronized,还会新搞一个ReentrantLock?ReentrantLock解决了Synchronized无法解决的3个问题:
- 能够响应中断;
线程调用synchronized获取锁A后,如果尝试获取锁B失败,会陷入阻塞状态,可能会陷入死锁状态。如果能响应中断,那么就可以解除死锁状态;
- 支持超时
如果线程在一段时间没有获取到锁,不会进入阻塞状态,而是返回一个错误;
- 非阻塞地获取锁
如果尝试获取锁失败,并不会进入阻塞状态,而是直接返回;
- 支持公平锁和非公平锁
ReentrantLock支持公平锁和非公平锁,synchronized仅支持非公平锁;