使用Object.wait(millisec)来模拟睡眠

Jac*_*ine 5 java concurrency multithreading

这是我在一些我正在维护的代码中看到的代码片段.

Object lock = new Object();

synchronized( lock ) 
{
   try
   {
       lock.wait( 50000 );
       Thread.sleep( 3000 );
   } 
   catch(Exception ex)
   {
   }
}
Run Code Online (Sandbox Code Playgroud)

开发人员希望暂停当前线程一段时间,并使用Object#wait作为机制.显然,由于这个原因,使用wait/notify协议是不好的形式; 但是,调用wait(millisec)和Thread.sleep之间有什么重大区别吗?

Ry4*_*ase 4

除了在 waiting() 之前必须获取监视器之外,只要没有外部设备进行 .notify() 操作,就没有什么大的区别了。

在古老的 Java 代码中,您会看到人们使用 wait() 而不是 Thread.sleep(),因为 Thread.sleep() 会冻结系统上的整个应用程序,而无需抢占式多任务处理(我正在看您的 OS9)。从技术上讲, wait() 还允许您使用纳米分辨率等待,但实际上它们很少那么准确。