wait()和wait(timeout).Anyway wait()需要等待notify调用,但是为什么我们要等待(Timeout)呢?
那么睡眠(超时)和等待(超时)之间有什么区别呢?
发布于 2010-07-08 10:53:58
如果线程在超时后仍在等待,则将返回wait( timeout )。这是用于挂起通知、低功耗轮询等。睡眠( timeout )不会被唤醒,直到超时时间已经过去;wait( timeout )是notify()调用或超时(以先到者为准)。
引用自JavaDoc:
此方法使当前线程(称为T)将其自身置于此对象的等待集中,然后放弃对此对象的任何和所有同步声明。线程T出于线程调度的目的而被禁用,并处于休眠状态,直到发生以下四种情况之一:
发布于 2010-07-08 11:01:36
wait( timeout ):当超时到期时,线程唤醒并尝试重新获取同步锁(即,如果另一个线程在超时期间没有通知它)。
睡眠(超时):睡眠可以在没有任何同步代码的情况下使用-它只是让线程在指定的超时时间内休眠。请注意,必须在同步代码中使用等待。
因此,当您期望一个线程收到另一个线程的通知时(但可能不会,因此超时),就会使用等待。并且,必须在同步的代码中调用wait。
发布于 2010-07-08 10:59:15
wait()和wait(timeout)之间的唯一区别是wait()永远不会在没有notify()的情况下醒来。timeout >0的wait(timeout)允许您在调用notify()时“永远”避免锁定应用程序。
https://stackoverflow.com/questions/3200402
复制相似问题