Object.wait() 不在 JVM 中旋转

Object.wait() without spinning in JVM

我有一个组件,其中线程轮询某些资源并且 System.currentTimeMillis();如果没有资源,他们会选择 Object.wait(1),因为我知道我将等待至少 1 毫秒(当线程看到新的时间戳时会补充资源)。但是,在 JVM 中,Object.wait() 导致 ObjectMonitor::TrySpin_VaryDuration,因此当我告诉它去睡觉时线程正在燃烧 CPU。

是否有任何解决方法(具有相似语义的更好的同步原语?)但重新设计组件以便线程进入无限睡眠并且只有一个线程忙于等待?或者我可以以某种方式有选择地在此对象上禁用它吗?

编辑:我的问题有点傻。我真的应该使用 Thread.sleep(1) 正如公认的答案所说(除非它也使用自旋锁 - 尚未确认),因为没有必要在时间唤醒等待线程,因为它们应该已经超时唤醒。

Object.wait(1) 是错误的工具。请改用 Thread.sleep(1)

您可以尝试使用名为 -XX:-UseSpinning

的标志