前言
使用 ReentrankLock 比直接使用 synchronized 更安全,可以替代 synchronized 进行线程同步. 对比 synchronized 配合 wait 和 notify 实现线程在条件不满足时等待,条件满足时唤醒; ReentrantLock 则使用 Condition 对象来实现 wait 和 notify 功能.
用法
使用时必须从 Lock 实例的 newCondition() 返回,这样才能获得一个绑定了 Lock 实例的 Condition 实例;
Condition提供的方法
- await() 释放当前锁,进入等待状态
- signal() 唤醒某个等待线程
- signalAll() 唤醒所有等待线程
此外和 tryLock 类似, await 可以在等待指定时间后,如果还没有被其他线程通过 signal() 或 signalAll() 唤醒,自己醒来;