Object.wait()没有在JVM中旋转

时间:2015-11-30 14:12:09

标签: java multithreading concurrency threadpool spinlock

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

有没有办法解决它(更好的同步原语与类似的semanthics?)但重新设计组件,以便线程无限制地休眠,只有一个线程忙于等待?或者我可以选择性地在这个对象上禁用它吗?

编辑:我的问题有点傻。我应该使用Thread.sleep(1)作为接受的答案说(除非使用自旋锁,否则还没有确认),因为当它等待线程时,没有必要唤醒等待的线程。因为他们应该已经超时醒来了。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

的标记