无限的“while 循环”会消耗过多的资源吗

GMs*_*soF 5 java loops infinite-loop while-loop

我想在特定时间触发 Java 代码,比如说每天凌晨 1 点。

我写了一个线程如下:

while (true) {
    if (currentTime = 1AM) {
        doSomething;
    }       
}
Run Code Online (Sandbox Code Playgroud)

我有点担心,while loop继续运行,会不会减慢机器速度,或者吃掉处理资源?

我的第一个问题是,我在想如果我每秒只循环 1 次,会更好吗?

while (true) {
    if (currentTime = 1AM) {
        doSomething;
    }       

    Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

我的第二个问题是,有时我看到while loop如下写,大部分时间是获取 Java 锁,如果我们在while loop下面这样写,谁能解释一下有多昂贵(对不起,如果这是非常基本的问题)?

while (isLock) {
    // do nothing
}

doThisIfNoLock();
Run Code Online (Sandbox Code Playgroud)

我扩展上面的想法,如果我创建一个空线程,并且while loop内部无限空,那么线程实际消耗了多少资源(处理能力)?因为循环里面没有内容,按照我的想象,循环会跑的非常快,最终会占用很多个CPU周期?真的吗?

Yog*_*h_D 5

运行无限 while 循环不是一个好习惯,因为它会占用 CPU。

对于计划任务,您可以使用 Quartz 等库或使用java.util.Timerjava.util.TimerTask

您的任务需要继承TimerTask并覆盖该run()方法。然后你需要使用Time.schedule()方法来安排你的任务。