A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 子弹滞销 初级黑马   /  2018-11-22 13:20  /  695 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是等待唤醒机制这是多个线程间的一种协作机制。谈到线程我们经常想到的是线程间的竞争(race),比如去争夺锁,但这并不是故事的全部,线程间也会有协作机制。就好比在公司里你和你的同事们,你们可能存在在晋升时的竞争,但更多时候你们更多是一起合作以完成某些任务。就是在一个线程进行了规定操作后,就进入等待状态(wait()), 等待其他线程执行完他们的指定代码过后 再将其唤醒(notify());在有多个线程进行等待时, 如果需要,可以使用 notifyAll()来唤醒所有的等待线程。wait/notify 就是线程间的一种协作机制。
Object中定义了三个和等待唤醒有关的三个方法:
    * wait() 调用后会释放锁对象,让当前线程陷入等待,直到有其他线程将其唤醒
    * notify() 唤醒其他正在等待的一个线程,先等待的先被唤醒
    * notifyAll() 唤醒全部正在等待的线程
使用前提:1. 同步中 2. 用锁对象调用这些方法

如果采用定义Lock锁对象的方式,就不能使用Object中的沉睡与唤醒方法,需使用其子类ReentrantLock中的newCondition方法.
newCondition会返回一个用来与此 Lock 实例一起使用的 Condition 实例。
Condition中有await(),signal()和signalAll方法,用来替代Object中的wait(),notify(),notifyAll()方法.
使用前提:1.同一个Lock锁对象2.同一个newCondition对象(达到指定唤醒,即同一个newCondition对象中的await()方法只能用本对象的signal()方法或 signalAll方法唤醒).


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马