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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐芾清 中级黑马   /  2014-3-5 08:38  /  1701 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能帮忙解释一下wait(long timeout)是什么意思?
timeout时间未到,其它线程notify,该线程是否会被唤醒?
时间到了还需要满足什么条件才能被唤醒?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

3 个回复

倒序浏览
书上看到的,希望对你有帮助  

wait()和notify()、notifyAll()  
    这三个方法用于协调多个线程对共享数据的存取,所以必须在Synchronized语句块内使用这三个方法。前面说过Synchronized这个关键字用于保护共享数据,阻止其他线程对共享数据的存取。但是这样程序的流程就很不灵活了,如何才能在当前线程还没退出Synchronized数据块时让其他线程也有机会访问共享数据呢?此时就用这三个方法来灵活控制。  
    wait()方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入Synchronized数据块,当前线程被放入对象等待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。 

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
回复 使用道具 举报
本帖最后由 sanguodouble1 于 2014-3-5 14:02 编辑

可以被叫醒,先解释一下wait()方法吧wait()就是让当前对象的访问线程沉睡,直到其他线程调用此对象的notify方法
,如果不调用notify方法或者不被强行中断,那是永远不会醒的。

而wait(long timeout)方法,在wait()基础上加入了最长睡眠时间的条件
比如timeout设定的是1分钟,那么1分钟后,就是没人叫醒他,他也会自己醒的
然后就跟其他正常等待的方法一个,公平竞争同步锁

注意wait(0) == wait()

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马