Untitled

synchronized(内置锁),ReentrantLcok(可重入锁)

  1. 用法不同:synchronized 可用来修饰普通方法、静态方法和代码块,而 ReentrantLcok 只能用在代码块上;

  2. 获取锁和释放锁的方式不同:

    synchronized 会自动加锁和释放锁,当进入 synchronized 修饰的代码块后会自动加锁,当离开 synchronized 的代码块之后会自动释放锁;而 ReentrantLock 需要手动加锁和释放锁。

  3. 锁类型不同

    synchronized 属于非公平锁,而 ReentrantLock既可以是公平锁也可以是非公平锁;

  4. 响应中断不同:如果发生了死锁,使用 synchronized 会一直等待下去;而使用 ReentrantLock 可以响应中断并释放锁,从而解决死锁问题。

  5. **底层实现不同:**synchronized 是 JVM 层面通过监视器实现的,而 ReentrantLock 是通过 AQS 程序级别的 API 实现的。