我知道 Thread.sleep() 可以使 java 线程暂停一段时间,比如某些毫秒和某些纳秒。但问题是这个函数的调用也会产生开销。
例如,如果我希望线程暂停 100 纳秒,我会调用 Thread.sleep(0, 100) 。这个过程的总成本是 invocation_cost + 100 nanosceonds ,这可能比我想要的要大得多。我怎样才能避免这个问题,并达到我的目的?
我需要这个的原因是我想离线进行模拟。我分析了任务的执行时间;现在我想通过在同一时间段内挂起一个线程来模拟这个执行时间。
谢谢!
原文由 JackWM 发布,翻译遵循 CC BY-SA 4.0 许可协议
睡眠的粒度通常受线程调度程序的中断周期限制。在Linux中,这个中断周期在最近的内核中一般是1ms。在 Windows 中,调度程序的中断周期通常在 10 或 15 毫秒左右
如果我必须暂停线程的时间少于这个时间,我通常使用忙等待
编辑:我怀疑您会在 jrockit + solaris 上获得最佳结果。 Windows 框上的数字很糟糕。