synchronized中也有条件变量,当条件不满足时进入WaitSet等待。
ReentrantLock的条件变量比Synchronized强大之处在于它支持多个条件变量。
await和signal方法
多条件变量的使用流程
1.await需要获得锁。
2.await执行后会释放锁,进入ConditionObject等待。
3.await被线程唤醒、或者打断、或者超时会重新竞争lock锁。
4.竞争lock成功后,从await后继续执行。
@Slf4j
public class ReentrantLockBean {
private static ReentrantLock reentrantLock = new ReentrantLock();
private static boolean hasCigarette = false;
private static boolean hasMeal = false;
//条件一,等烟的房间
private static Condition waitCigaretteRoom = reentrantLock.newCondition();
//条件二,等餐的房间
private static Condition waitMealRoom = reentra