为什么已经有synchronized,还会新搞一个ReentrantLock?ReentrantLock解决了Synchronized无法解决的3个问题:

    • 能够响应中断;

    线程调用synchronized获取锁A后,如果尝试获取锁B失败,会陷入阻塞状态,可能会陷入死锁状态。如果能响应中断,那么就可以解除死锁状态;

    • 支持超时

    如果线程在一段时间没有获取到锁,不会进入阻塞状态,而是返回一个错误;

    • 非阻塞地获取锁

    如果尝试获取锁失败,并不会进入阻塞状态,而是直接返回;

    • 支持公平锁和非公平锁

    ReentrantLock支持公平锁和非公平锁,synchronized仅支持非公平锁;