作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我知道 Thread.sleep() 可以让 java 线程暂停一段时间,比如几毫秒和几纳秒。但问题是这个函数的调用也会导致开销。
例如,如果我想让一个线程挂起 100 纳秒,我调用 Thread.sleep(0, 100)。这个过程的全部成本是 invocation_cost + 100 纳秒,这可能比我想要的要大得多。我怎样才能避免这个问题,并达到我的目的?
我需要这个的原因是我想离线进行模拟。我分析了一个任务的执行时间;现在我想通过在同一时间段内挂起一个线程来模拟这个执行时间。
谢谢!
最佳答案
sleep 的粒度一般受线程调度器的中断周期限制。在 Linux 中,这个中断周期在最近的内核中一般为 1ms。在 Windows 中,调度程序的中断周期通常在 10 或 15 毫秒左右
如果我必须在少于此时间的时间内停止线程,我通常会使用忙等待
编辑:我怀疑你会在 jrockit + solaris 上得到最好的结果。 Windows 框上的数字很糟糕。
@Test
public void testWait(){
final long INTERVAL = 100;
long start = System.nanoTime();
long end=0;
do{
end = System.nanoTime();
}while(start + INTERVAL >= end);
System.out.println(end - start);
}
关于java - 如何暂停 Java 线程一小段时间,比如 100 纳秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11498585/
我是一名优秀的程序员,十分优秀!