2

两者都在尝试做类似的事情,即对线程产生一些影响。

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

问题是,大多数时候他们都在做类似的事情——是什么让你选择一个而不是另一个?

4

4 回答 4

11

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

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

于 2012-05-21T22:15:31.773 回答
1

睡眠和等待看起来很诱人,它们有很大的不同:

睡眠 - 使线程在给定的时间内睡眠 - 有利于调度任务、动画等......

等待 - 主要用于没有时间限制,使一个线程等待某事发生,这是同步的最佳实践。

如果您试图通过使用睡眠来实现等待,那是不好的做法,这有点接近一些非常糟糕的事情,称为忙等待。

于 2012-05-21T22:19:54.130 回答
0

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

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

于 2012-05-21T22:15:48.323 回答
0

这两种方法做非常不同的事情:在等待通知事件Thread.sleep的同时Object.wait等待指定的时间(这可能需要任意时间才能发生)。

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

于 2012-05-21T22:16:16.393 回答