【发布时间】:2012-07-14 23:06:31
【问题描述】:
我知道 Thread.sleep() 可以让 java 线程暂停一段时间,比如几毫秒和几纳秒。但问题是这个函数的调用也会导致开销。
例如,如果我想让一个线程挂起 100 纳秒,我调用 Thread.sleep(0, 100)。这个过程的全部成本是 invocation_cost + 100 纳秒,这可能比我想要的要大得多。我怎样才能避免这个问题,并达到我的目的?
我需要这个的原因是我想离线进行模拟。我分析了一个任务的执行时间;现在我想通过在同一时间段内挂起一个线程来模拟这个执行时间。
谢谢!
【问题讨论】:
-
您有什么特别的理由要这样做吗?如果是这样,它可能会以不同的方式解决......
-
这是一个不寻常的要求。听起来您需要back off strategy 或类似名称。
-
@gt 仅供参考,在 stackoverflow 上发布问题并回复该问题而不是提供答案很烦人。多年来,在项目中出现了许多想要这样做的正当理由。一个实际的原因是在从硬件录制音频的应用程序中保持实时行为,因为硬件的行为可能不一致,或者您可能出于测试目的模拟硬件行为。
-
@EntangledLoops 感谢您提供示例。我不怀疑这样做有充分的理由。我发现最佳答案通常会考虑提出问题的上下文。一旦 OP 提供了一些背景信息,请查看下面 Peter Lawrey 的回答以查看此示例。
-
在某些情况下,非常短的睡眠很有用,例如当与只能以低于控制器代码向其传递消息的速率(但仍远超过一千消息一秒钟)。这个问题(及其答案)在这些情况下很有用。
标签: java sleep thread-sleep method-invocation nanotime