可重入锁,也叫递归锁。是指在一个线程中可以多次获取同一把锁。
比如:一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法,而无需重新获得锁。
Java 中的
ReentrantLock
和 Synchronized
都属于可重入锁。其最大的作用是避免死锁与 synchronized 区别
- 等待可中断 :
ReentrantLock
提供了一种能够中断等待锁的线程的机制,通过lockInterruptibly()
来实现这个机制。也就是说正在等待的线程可以响应其他线程发出的Thread.interupt()
方法;lock()
方法则会在获取锁成功后才进入 interupted 状态。
- 可实现公平锁 :
ReentrantLock
可以指定是公平锁还是非公平锁。而synchronized
只能是非公平锁。
- 锁可以绑定多个条: 需要使用
Condition
接口与newCondition()
方法