黑马程序员技术交流社区

标题: wait(long timeout)是什么意思? [打印本页]

作者: 徐芾清    时间: 2014-3-5 08:38
标题: wait(long timeout)是什么意思?
谁能帮忙解释一下wait(long timeout)是什么意思?
timeout时间未到,其它线程notify,该线程是否会被唤醒?
时间到了还需要满足什么条件才能被唤醒?

作者: 今生无憾    时间: 2014-3-5 09:35
书上看到的,希望对你有帮助  

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

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

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

注意wait(0) == wait()






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2