首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待()/wait(超时)/sleep(超时)?

等待()/wait(超时)/sleep(超时)?
EN

Stack Overflow用户
提问于 2010-07-08 10:50:07
回答 4查看 21.3K关注 0票数 5

wait()和wait(timeout).Anyway wait()需要等待notify调用,但是为什么我们要等待(Timeout)呢?

那么睡眠(超时)和等待(超时)之间有什么区别呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-08 10:53:58

如果线程在超时后仍在等待,则将返回wait( timeout )。这是用于挂起通知、低功耗轮询等。睡眠( timeout )不会被唤醒,直到超时时间已经过去;wait( timeout )是notify()调用或超时(以先到者为准)。

引用自JavaDoc:

此方法使当前线程(称为T)将其自身置于此对象的等待集中,然后放弃对此对象的任何和所有同步声明。线程T出于线程调度的目的而被禁用,并处于休眠状态,直到发生以下四种情况之一:

  • 某些其他线程调用此对象的notify方法,线程T恰好被任意选择为要唤醒的线程。
  • 某些其他线程调用此对象的notifyAll方法。
  • 某些其他线程中断线程T。
  • 指定的实时量或多或少已经过去。但是,如果超时为零,则不会考虑实时,线程只会等待,直到收到通知。
票数 13
EN

Stack Overflow用户

发布于 2010-07-08 11:01:36

wait( timeout ):当超时到期时,线程唤醒并尝试重新获取同步锁(即,如果另一个线程在超时期间没有通知它)。

睡眠(超时):睡眠可以在没有任何同步代码的情况下使用-它只是让线程在指定的超时时间内休眠。请注意,必须在同步代码中使用等待。

因此,当您期望一个线程收到另一个线程的通知时(但可能不会,因此超时),就会使用等待。并且,必须在同步的代码中调用wait。

票数 5
EN

Stack Overflow用户

发布于 2010-07-08 10:59:15

wait()wait(timeout)之间的唯一区别是wait()永远不会在没有notify()的情况下醒来。timeout >0的wait(timeout)允许您在调用notify()时“永远”避免锁定应用程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3200402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档