在我的 java 代码下面,在无限循环中每 10 秒做一些事情 - 我用三重循环替换了我在程序中所做的事情,以便在每次迭代中占用一些 cpu 周期。在三重循环之后,我有一个 System.out.println 显示迭代次数、以毫秒为单位的循环长度(当然应该是 10 秒)和三重循环的结果。这可以正常工作一段时间,然后突然之间(在这种情况下,在第 160 次迭代时,持续时间加倍,然后变为 0??)它变得混乱,正如此输出所示...
150:所用时间 = 9998 和虚拟 = 0.8775897877771157
151:花费的时间 = 9997 和虚拟 = 0.8775753358042688
152:花费的时间 = 9997 并且虚拟 = 0.07072216723899125
153:花费的时间 = 9999 并且虚拟 = -0.8011526357338304
154:花费的时间 = 9998 并且虚拟 = -0.936451400117644
155:花费的时间 = 9998 并且虚拟 = -0.21078106590019152
156:花费的时间 = 9998 并且虚拟 = 0.7086804082392084
157:花费的时间 = 10013 并且虚拟 = 0.9765843832906294
158:花费的时间 = 9996 和虚拟 = 0.346621180094276
159:花费的时间 = 10002 并且虚拟 = -0.6020239375552833
160:所用时间 = 186326 和虚拟 = -0.997171023392149
161:所用时间 = 0 且虚拟 = -0.47552366901205834
162:所用时间 = 0 且虚拟 = 0.48331795366796265
163:所用时间 = 0 且虚拟 = 0.9977992786806003
164:所用时间 = 0 且虚拟 = 0.594908548461427
165:花费的时间 = 0 并且虚拟 = -0.3549383576518463
166:花费的时间 = 0 并且虚拟 = -0.9784565746221131
167:所用时间 = 0 且虚拟 = -0.7023863292684921
168:所用时间 = 0 且虚拟 = 0.21945466799406363
169:所用时间 = 0 且虚拟 = 0.9395300555699313
170:花费的时间 = 0 并且虚拟 = 0.7958058429196471
171:所用时间 = 0 且虚拟 = -0.07957859166428352
172:所用时间 = 0 且虚拟 = -0.8817988360675502
173:所用时间 = 0 且虚拟 = -0.8732972972139946
174:所用时间 = 0 且虚拟 = -0.06189025071872073
175:所用时间 = 0 且虚拟 = 0.8064184068658303
176:所用时间 = 0 且虚拟 = 0.9333097001669604
177:所用时间 = 0 且虚拟 = 0.2021203593127912
178:花费的时间 = 3673 并且虚拟 = -0.7148975077677643
179:花费的时间 = 9998 并且虚拟 = -0.97464190312541
我做错了什么??
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Weg {
long t0;
long t1;
long cntr;
public Weg() {
t0 = System.currentTimeMillis();
cntr = 0;
//This code arranges the infinite loop...
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable updateRunnable = () -> {
try {
//Do stuff here...
double dummy = 0;
int n=10;
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
for (int k=0; k<n; k++) {
dummy = Math.sin(i+j+k+cntr);
}
}
}
t1 = System.currentTimeMillis();
System.out.println(cntr + ": time taken = " + (t1 - t0) + " and dummy = " + dummy);
t0 = t1;
cntr++;
} catch (Exception e) {
e.printStackTrace();
}
};
executor.scheduleAtFixedRate(updateRunnable, 10, 10, TimeUnit.SECONDS);
}
public static void main(String[] args) {
new Weg();
}
}