我可以用等待而不是睡觉吗?

这个问题在这里已经有了答案:

  • wait()和sleep()之间的差异33个答案

  • sleep()wait()都用于保持当前线程,但它们是针对不同的用例设计的:

    sleep()通常用于确切知道线程闲置多长时间。 在给定的超时后,它会自动唤醒,不受外部干扰。 如果发生紧急事件(在这种情况下, sleep()的调用将以InterruptedException结束sleep() ,仍然有人可能会提前唤醒线程。 例如,用户决定在线程休眠时关闭应用程序,或者类似的东西。

    所以, sleep()就像设置一个闹钟在一个小时内唤醒你,同时打瞌睡。 但有人可以早点叫醒你说建筑物着火了,最好是站起来做点什么。

    另一方面, wait()目的是让线程暂停,直到将来某个时候发生。 你不知道需要多长时间。 必须有外面的人通过调用监视器上的notify()notifyAll()来唤醒线程(与用于调用wait()的相同对象上)。 例如,一个线程已经将一些工作委托给另一个线程,并希望在工作完成之前进入休眠状态。 您也可以选择限制等待时间,但线程只有重新获取显示器后才能继续执行。 等待的线程仍然可以像sleep()一样被中断。

    所以, wait()就像是工作坊里唯一的螺丝刀,借给你的同事一段时间,并决定休息一下,直到他或她完成。 当您的螺丝刀再次释放并且您可以继续工作时,请他们叫醒您。 您也可以像sleep()一样设置闹钟sleep() ,但在您拿回螺丝刀之前,您将无法恢复工作。

    当然,这些只是通常使用这些方法的简单方法。 您可以根据其功能设计自己的使用场景。


    javadoc中的区别非常明显:

    void Object.wait() :使当前线程等待,直到另一个线程调用此对象的notify()方法或notifyAll()方法。

    void Object.wait(long timeout) :导致当前线程等待,直到另一个线程调用此对象的notify()方法或notifyAll()方法或经过指定的时间量。

    static void Thread.sleep(long millis) :使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,这取决于系统定时器和调度程序的精度和准确性。

    否则,这个问题会被询问并在这里得到解释的答案。

    链接地址: http://www.djcxy.com/p/92135.html

    上一篇: Can I use wait instead of sleep?

    下一篇: Thread.sleep and object.wait