我通常按以下方式使用无限循环:
public static boolean start = false;
while(!start) {
doMyLogic();
}
Run Code Online (Sandbox Code Playgroud)
但是一位朋友说,您需要在while-true循环(如波纹管)中留一点延迟,否则可能会导致内存问题,也不是一个好习惯。
建议方式:
while(!start) {
Thread.sleep(few_miliseconds); // 500 ms
doMyLogic();
}
Run Code Online (Sandbox Code Playgroud)
请告知我建议方式的影响。我做对了吗?
好吧,我认为它不会有内存问题(除非你的 doMyLogic 方法有内存问题),因为无论延迟如何,任何内存泄漏都会显现出来。睡眠的真正好处是,在大多数情况下,代码不需要像计算机一样快地执行 doMyLogic。例如,假设 doMyLogic 正在检查目录中是否创建了文件。对于这种情况,计算机没有必要每秒检查数百次(这将需要大量 CPU 和磁盘 I/O),每秒 1 次就足够了。
没有计时的最大影响是使用额外的 CPU 时间和逻辑功能拥有的其他资源,在大多数情况下对最终用户没有明显的影响。