1. 前言
Condition是用来替代传统的Object的wait()、notify()的,相比使用Object的wait()、notify()实现线程间协作更加安全和高效
2. 介绍
- 生成一个Condition的代码是lock.newCondition()
- 调用Condition的await()和signal()方法,都必须在lock之内,就是说必须在lock.lock()和lock.unlock之间才可以使用
- Condition中的await()对应Object的wait()
- Condition中的signal()对应Object的notify()
- Condition中的signalAll()对应Object的notifyAll()
3. 简单的使用
3.1. Object.wait()
|
运行结果如下
- 1号 上锁
- 2号 上锁
- 2号 叫醒1号
- 2号 完全释放锁
- 1号 收到信号不等了
- 1号 完全释放锁
3.2. lock.newCondition()
|
运行结果如下
- 1号 上锁
- 1号 等待
- 2号 上锁
- 2号 叫醒1号
- 2号 完全释放锁
- 1号 收到信号不等了
- 1号 释放锁
4. 生产消费模式
4.1. Object.wait()
|
4.2. lock.newCondition()
|
5. 总结
可以看到使用#newCondition
方法时可以明确的指定具体将那种类型的锁取消等待, 在线程多的情况下可以起到很大的优化