重入锁, 即同一个线程可以对 ReentrantLock 多次加锁, 但与之对应的, 必须执行相同次数的解锁, 否则其他线程无法获取到锁资源.
1. API
- ReentrantLock(boolean fair)
初始化时, 可以设置是否公平竞争. - lock
可重入锁 - unlock
- lockInterruptibly
响应中断, 即在请求锁的过程中, 取消对锁的请求. 有助于处理死锁问题. - tryLock
尝试请求锁, 可以设置最大等待时长. - newCondition
新建锁的条件. Condition 有 await 和 signal 等方法.
await 方法会使当前线程等待, 同时释放当前锁, 在其他线程调用 signal 或 signalAll 方法后重新获得锁并继续执行. 或者当前线程被中断时, 也能跳出等待.
awaitUninterruptibly 方法类似于 await 方法, 但它不会在等待过程中响应中断.