两者都在尝试做类似的事情,即对线程产生一些影响。
我知道 thread.sleep 是让 CURRENT 线程休眠并等待可以让任何线程等待,如果他们试图获得对象的锁。
问题是,大多数时候他们都在做类似的事情——是什么让你选择一个而不是另一个?
两者都在尝试做类似的事情,即对线程产生一些影响。
我知道 thread.sleep 是让 CURRENT 线程休眠并等待可以让任何线程等待,如果他们试图获得对象的锁。
问题是,大多数时候他们都在做类似的事情——是什么让你选择一个而不是另一个?
不,Object.wait()
也只会导致当前线程阻塞。
主要区别在于sleep()
指示当前线程休眠一段时间,而wait()
指示当前线程释放一个监视器,然后休眠直到通知监视器。换句话说,wait()
是线程之间的协调原语,而sleep()
只关心时间的流逝(假设没有中断)。
睡眠和等待看起来很诱人,它们有很大的不同:
睡眠 - 使线程在给定的时间内睡眠 - 有利于调度任务、动画等......
等待 - 主要用于没有时间限制,使一个线程等待某事发生,这是同步的最佳实践。
如果您试图通过使用睡眠来实现等待,那是不好的做法,这有点接近一些非常糟糕的事情,称为忙等待。
一个用于将线程同步在一起,而另一个用于休眠给定的时间。
如果你想同步线程一起,用户等待/通知。如果您想睡一段已知的时间,请使用 Thread.sleep。
这两种方法做非常不同的事情:在等待通知事件Thread.sleep
的同时Object.wait
等待指定的时间(这可能需要任意时间才能发生)。
两者都只能让当前线程休眠。此外,Object.wait
要求当前线程持有与对象关联的监视器。