youyichannel

志于道,据于德,依于仁,游于艺!

0%

Lock全解读04

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()
等待队列个数 一个 多个
当前线程释放锁并进入等待状态 支持 支持
当前线程释放锁并进入等待状态,在等待状态中不响应中断 不支持 支持
当前线程释放锁并进入超时等待状态 支持 支持
当前线程释放锁并进入等待状态到将来的某个时间 不支持 支持
唤醒等待队列中的一个线程 支持 支持
唤醒等待队列中的全部线程 支持 支持