Thread.sleep和object.wait

时间:2012-05-21 22:12:32

标签: java

两者都试图做类似的事情,这对线程产生了一些影响。

我知道thread.sleep是让CURRENT线程休眠而等待可以让任何线程等待,如果他们试图获取对象的锁定。

问题是,大部分时间他们都在做类似的事情 - 是什么让你选择一个而不是另一个?

4 个答案:

答案 0 :(得分:11)

不,Object.wait()也只会导致当前线程被阻止。

主要区别在于sleep()指示当前线程休眠一段时间,而wait()指示当前线程释放监视器,然后睡眠直到通知监视器。换句话说,wait()是线程之间的协调原语,而sleep()只关心时间的流逝(假设没有中断)。

答案 1 :(得分:1)

睡眠和等待看起来很不错,他们有很多不同之处:

睡眠 - 使线程休眠一段时间 - 适用于预定任务,动画等......

等待 - 主要是在没有时间限制的情况下使用,使一个线程等待某些东西,这是同步的最佳实践。

如果你试图通过使用Sleep来实现等待,那就是不好的做法,这有点接近一些叫做忙碌等待的非常糟糕的事情。

答案 2 :(得分:0)

一个用于同步线程,而另一个用于休眠一段给定的时间。

如果要将线程同步,用户等待/通知。如果你想睡一段已知的时间,请使用Thread.sleep。

答案 3 :(得分:0)

这两种方法做了很多不同的事情:Thread.sleep等待指定的时间,而Object.wait等待通知事件(可能需要花费任意时间)。

两者都只能将当前线程置于休眠状态。此外,Object.wait要求当前线程持有与对象关联的监视器。