gpt4 book ai didi

java - Object.wait() 无需在 JVM 中旋转

转载 作者:行者123 更新时间:2023-12-01 21:58:41 26 4
gpt4 key购买 nike

我有一个组件,其中线程轮询某些资源和System.currentTimeMillis();如果没有资源,它们会使用 Object.wait(1),因为我知道我会等待至少 1 毫秒(当线程看到新时间戳时,资源会得到补充)。然而,在 JVM 中,Object.wait() 会导致 ObjectMonitor::TrySpin_VaryDuration,因此当我告诉它去 sleep 时,该线程正在消耗 CPU。

有没有办法解决这个问题(具有类似语义的更好的同步原语?),但重新设计组件,以便线程无限 sleep ,并且只有一个线程忙于等待?或者我可以以某种方式选择性地在此对象上禁用它吗?

编辑:我的问题有点愚蠢。我真的应该使用 Thread.sleep(1) ,正如接受的答案所说(除非也使用自旋锁 - 尚未确认),因为当时间达到时唤醒等待线程是没有意义的他们应该已经超时醒来。

最佳答案

Object.wait(1) 是不适合这项工作的工具。使用Thread.sleep(1)相反。

关于java - Object.wait() 无需在 JVM 中旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34000594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com