Jav*_*ser 3 java multithreading
wait()和wait(timeout)之间有什么区别.Anyway wait()需要等待通知调用,但为什么我们要等待(超时)?
那么睡眠(超时)和等待(超时)之间有什么区别?
Bor*_*lid 11
如果线程在超时过后仍在等待,则wait(timeout)将返回.这适用于挂起通知,低功耗轮询等.睡眠(超时)在超时结束前不会唤醒; wait(timeout)是notify()调用或超时,以先到者为准.
引用JavaDoc:
此方法使当前线程(称为T)将自身置于此对象的等待集中,然后放弃此对象上的任何和所有同步声明.线程T因线程调度而被禁用,并且在发生以下四种情况之一之前处于休眠状态:
- 其他一些线程调用此对象的notify方法,并且线程T恰好被任意选为要被唤醒的线程.
- 其他一些线程为此对象调用notifyAll方法.
- 一些其他线程中断线程T.
- 指定的实时数量已经或多或少地过去了.但是,如果超时为零,则不考虑实时,并且线程只是等待通知.
wait(超时):当超时到期时,线程唤醒并尝试重新获取同步锁(即,如果另一个线程在超时期限内没有通知它).
sleep(超时):可以在没有任何sycnhronization代码的情况下使用sleep - 它只是让线程在指定的超时时间内进入休眠状态.请注意,必须在同步代码中使用wait.
因此,当您希望线程被另一个线程通知时使用wait(但可能不会,因此超时).并且,必须在同步代码中调用wait.
| 归档时间: |
|
| 查看次数: |
16245 次 |
| 最近记录: |