虽然有延迟

时间:2012-10-26 14:19:42

标签: java while-loop

我通常使用无限循环,如下所示:

public static boolean start = false;

while(!start) {
    doMyLogic();
}

但是一位朋友说你需要在while-true循环中稍微延迟(如下),否则它可能会导致内存问题而且这也不是一个好习惯。

建议方式:

while(!start) { 
    Thread.sleep(few_miliseconds);  // 500 ms
    doMyLogic();
}

请告诉我建议方式的影响。我做得对吗?

5 个答案:

答案 0 :(得分:3)

我会使用ScheduledExecutorService

ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        doMyLogic();
    }
}, 500, 500, TimeUnit.MILLISECONDS);

此服务可以重复用于许多重复或延迟的任务,并且可以根据需要shutdown()

答案 1 :(得分:2)

不是内存问题,但是你阻止了CPU。绝对使用延迟。

它还取决于doMyLogic()方法。

答案 2 :(得分:2)

在(半)无限循环中插入sleep是一个好习惯,所以当代码执行到达睡眠状态时,其他线程也可以执行。

答案 3 :(得分:2)

如果你没有暂停,你的CPU会不断做一些事情。您实际上阻止了CPU。但是,如果你添加一个暂停(sleep()),你可以让CPU休息一下来做其他事情。

答案 4 :(得分:2)

好吧,我不认为它会有内存问题(除非你的doMyLogic方法有内存问题),因为任何内存泄漏都会表现出来,无论延迟如何。睡眠的真正好处在于,在大多数情况下,代码不需要像计算机那样快速地执行doMyLogic。例如,假设doMyLogic正在检查文件是否在目录中创建。没有必要让计算机每秒检查数百次(这需要大量的CPU和磁盘I / O),而每秒1次就足够了。

没有时间的最大影响是使用额外的CPU时间和逻辑功能所具有的其他资源,在大多数情况下对最终用户没有明显的影响。