ReentrantLock

ReentrantLock 是一个可重入的互斥锁,又被称为“独占锁”。

ReentrantLock 锁在同一个时间点只能被一个线程锁持有;可重入表示,ReentrantLock 锁可以被同一个线程多次获取。

ReentrantLock 是通过一个 FIFO 的等待队列来管理获取该锁所有线程的。在“公平锁”的机制下,线程依次排队获取锁;而“非公平锁”在锁是可获取状态时,不管自己是不是在队列的开头都会获取锁。

ReentrantLock 和 Synchronized 比较

  1. synchronized 是独占锁,加锁和解锁的过程自动进行,易于操作,但不够灵活。ReentrantLock 也是独占锁,加锁和解锁的过程需要手动进行,不易操作,但非常灵活。
  2. synchronized 可重入,因为加锁和解锁自动进行,不必担心最后是否释放锁;ReentrantLock 也可重入,但加锁和解锁需要手动进行,且次数需一样,否则其他线程无法获得锁。
  3. synchronized 不可响应中断,一个线程获取不到锁就一直等着;ReentrantLock 可以相应中断。