【问题标题】:Thread.sleep and object.wait [duplicate]Thread.sleep 和 object.wait [重复]
【发布时间】:2012-05-28 10:22:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      Sleep and Wait 看起来很诱人,它们有很大的不同:

      Sleep - 让线程休眠给定的时间 - 适合调度任务、动画等...

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2017-11-28
            • 2021-09-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-22
            • 1970-01-01
            • 1970-01-01
            • 2016-08-01
            • 1970-01-01
            相关资源
            最近更新 更多