ReentrantLock
可重入
可中断
synchronized 和 lock.lock() 都是不可打断的,可以使用 lock.lockInterruptibly() 来设置可打断锁。
interrupt() 方法可以打断 sleep、wait、lock.lockInterruptibly() 状态,停止无休止的等待,解决死锁。interrupt() 如果打断的是正常运行的线程,可以通过当前线程的 isInterrupted() 方法判断线程状态,进而进入后续操作。如果打断的是 sleep 或 wait 状态的线程,使用try{} catch{} 会清除打断标记,需要调用当前线程的 interrupt 方法来对当前线程重新标记中断状态。
锁超时
如果无法获得锁,直接返回
公平锁
默认非公平
条件变量
小结