无限循环在一段时间后失控

时间:2021-07-14 14:24:33

标签: java infinite-loop

在我的 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();
    }
}

0 个答案:

没有答案
相关问题