Using Object.wait(millisec) to simulate sleep

后端 未结 3 1464
庸人自扰
庸人自扰 2021-01-06 02:15

Here\'s a snippet of code that I saw in some code I\'m maintaining.

Object lock = new Object();

synchronized( lock ) 
{
   try
   {
       lock.wait( 50000          


        
3条回答
  •  长发绾君心
    2021-01-06 02:52

    Note that there is one key difference in using Object.wait() and Thread.sleep() inside a synchronization block: Thread.sleep() does not release the locked monitor, so no-one else can become the owner of the monitor.

    In addition, Object.wait() does not guarantee that the delay indicated will be obeyed strictly. First of all, after the delay passes, the thread may still be waiting for another thread that has become the monitor owner in the meantime; and it may compete with other threads waiting to grab the monitor.

    Second, the mythical spurious wake-up, as it is described in the Java 6 API javadoc:

    A thread can also wake up without being notified, interrupted, or timing out, a so-called spurious wakeup.

    Unlikely as it is, every piece of code using Object.wait() should take it into consideration.

提交回复
热议问题