Condition 解读
任意一个Java对象,都拥有一组监视器方法,定义在java.lang.Object
上,主要包括wait()
、wait(long timeout)
、notify()
以及notifyAll()
,这些方法与synchronized同步关键字配合,可以实现等待/通知模式。
Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。通过对比Object的监视器方法和Condition接口,可以更详细地了解Condition的特性。
对比项 | Object Monitor Methods | Condition |
---|---|---|
前置条件 | 获取对象的锁 | 调用Lock.lock() 获取锁,调用Lock.newCondition() 获取Condition对象 |
调用方式 | 直接调用,比如obj.wait() |
直接调用,比如con.await() |
等待队列个数 | 一个 | 多个 |
当前线程释放锁并进入等待状态 | 支持 | 支持 |
当前线程释放锁并进入等待状态,在等待状态中不响应中断 | 不支持 | 支持 |
当前线程释放锁并进入超时等待状态 | 支持 | 支持 |
当前线程释放锁并进入等待状态到将来的某个时间 | 不支持 | 支持 |
唤醒等待队列中的一个线程 | 支持 | 支持 |
唤醒等待队列中的全部线程 | 支持 | 支持 |