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