java - 使用 Object.wait(milliseconds) 模拟 sleep

标签 java multithreading concurrency

这是我在维护的一些代码中看到的一段代码。

Object lock = new Object();

synchronized( lock ) 
{
   try
   {
       lock.wait( 50000 );
       Thread.sleep( 3000 );
   } 
   catch(Exception ex)
   {
   }
}

开发人员希望将当前线程挂起一段时间,并使用 Object#wait 作为机制。显然,出于这个原因,使用等待/通知协议(protocol)是一种不好的形式;但是,调用 wait(millisec) 和 Thread.sleep 之间有什么主要区别吗?

最佳答案

除了在 waiting() 之前必须获得监视器之外,只要没有外部人员将要 .notify()ing,就没有什么大的区别了。

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

关于java - 使用 Object.wait(milliseconds) 模拟 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/708333/

相关文章:

java - 如何将 jar 与配置文件一起打包为 docker 镜像

multithreading - 纯 Swift 并发

java - 扩展 vert.x 中的工作池

file-io - 与平台无关的文件锁定?

go - 为什么不读/写其内容的结构方法仍然会导致竞争情况?

java - 有没有办法使用 JMX 代码来捕获网络异常?

java - Maven 2 多模块 pom

java - 使用线程在 JavaFX 中移动矩形

multithreading - D 程序中的并发

java - mvn 测试期间连接 JVM