我知道有很多因素会影响 Java 程序的运行时间。我试图消除其中的一些,包括:
- 热身跑被考虑但不计算在内。
System.gc()
在任意两次运行之间调用。
但我发现数据仍然有很大差异。这是使用 10 个线程时的示例:
157th run
0 run time: 9106171
1 run time: 9084652
2 run time: 8990820
3 run time: 8989474
5 run time: 9062850
4 run time: 9302010
9 run time: 9454475
8 run time: 9506585
7 run time: 9494990
6 run time: 9491779
total time: 31 ms
158th run
2 run time: 14754858
5 run time: 14865035
0 run time: 15759180
1 run time: 15988056
3 run time: 16660592
8 run time: 16340240
9 run time: 16544479
6 run time: 17280122
7 run time: 17249778
4 run time: 18026322
total time: 19 ms
我发现对于大多数运行,它们花费了大约 17~20 毫秒,但对于 <5% 的运行,它们花费了大约 25~31 毫秒。更有趣的是,在后面的情况下,每个线程的运行时间更短了!
这个程序中的主线程只有线程start()
,join()
没有更多的工作要做。
谁能提供一些想法/提示?