ReentrantLock

可重入锁,也叫递归锁。是指在一个线程中可以多次获取同一把锁。
比如:一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法,而无需重新获得锁。
Java 中的 ReentrantLock 和 Synchronized 都属于可重入锁。其最大的作用是避免死锁

与 synchronized 区别

  • 等待可中断 : ReentrantLock提供了一种能够中断等待锁的线程的机制,通过 lockInterruptibly() 来实现这个机制。也就是说正在等待的线程可以响应其他线程发出的Thread.interupt()方法;lock() 方法则会在获取锁成功后才进入 interupted 状态。
  • 可实现公平锁 : ReentrantLock可以指定是公平锁还是非公平锁。而synchronized只能是非公平锁。
  • 锁可以绑定多个条: 需要使用Condition接口与newCondition()方法