Condition

一、简介

我们在使用Synchronized关键字的时候,可以使用对象监视器的wait/notify方法来实现等待通知。当我们使用Lock的时候,如果想要实现等待通知就需要使用Condition对象了。

二、与wait/notify的对比

对比项

对象监视器的方法

Condition

前置条件

获取对象的锁

调用Lock.lock获取锁,调用Lock.newCondition获取Condition对象

调用方式

直接调用,如:object.wait()

直接调用,如:condition.await()

等待队列个数

一个

多个

当前线程释放锁并进入等待状态

支持

支持

当前线程释放锁并进入等待状态,在等待状态中不响应中断

不支持

支持

当前线程释放锁并进入超时等待状态

支持

支持

当前线程释放锁并进入等待状态到将来的某个时间

不支持

支持

唤醒等待队列中的一个线程

支持

支持

唤醒等待队列中的全部线程

支持

支持

Last updated