在多线程程序中获得执行时间

时间:2010-11-14 08:54:34

标签: java

我正在尝试使用java中的多线程对数组进行排序,并记下它的执行时间。我正在使用System.nanoTime()。

这是代码的模板

start = System.nanoTime();
sort();   // calls different threads to completely sort the array
end = System.nanoTime()

我想问的是,上面的内容是在主线程中,所以如果我没有放入main.sleep(),它会给我不正确的时间结果吗?或者它是由JVM处理的。另外,如果我需要快速执行,那么可以在时间执行方面改善上述代码的性能吗?

2 个答案:

答案 0 :(得分:3)

  

我想问的是,上面的内容是在主线程中,所以如果我没有放入main.sleep(),它会给我不正确的时间结果吗?或者它是由JVM处理的。

System.nanoTime()应该为您提供最佳(最精确)的可用时间度量。注意:

  • 这不是衡量所用CPU时间的指标,
  • 在某些版本的Java / OS平台上,System.nanoTime()使用的硬件时钟在不同的内核之间不同步,并且(显然)因此可能相当不准确。

就个人而言,我会使用System.currentTimeMillis(),并确保我对大型数组或集合的排序进行基准测试......并做了各种其他事情以确保我的基准测试有效。

编辑 - 如果您想了解每个线程使用了多少CPU时间,请查看ThreadMXBean API。)

  

此外,如果我需要快速执行,还有什么能够在时间执行方面提高上述代码的性能吗?

这是一个非常普遍的问题,除了说“可能是的”......或“描述它”。

答案 1 :(得分:0)

您可以使用JVisualVM探查器(或其他探查器)来查找每个方法的执行速度。

您只需要在开头暂停以允许您附加它,并在结尾处暂停,以便您可以查看和/或保存结果。