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