java - 无限的 'while loop'会不会消耗过多的资源

标签 java loops while-loop infinite-loop

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

我写了一个线程如下:

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

我有点担心,while 循环 继续运行,会不会减慢机器速度,或者占用处理资源?

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

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

    Thread.sleep(1000);
}

我的第二个问题是,有时我看到 while loop 写成如下,大部分时间是获取 Java 锁,谁能解释一下如果我们写while 循环 像下面这样(抱歉,如果这是一个非常基本的问题)?

while (isLock) {
    // do nothing
}

doThisIfNoLock();

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

最佳答案

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

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

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

关于java - 无限的 'while loop'会不会消耗过多的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38651517/

相关文章:

windows - 为什么我不能终止这个 while 循环?

java - 如何根据属性值过滤json元素

java - 正则表达式整个单词选项

c# - FFMPEG 进程太多

python - 如何使用 openCV 更改它继续循环和错误的 python 脚本

Python pandas 循环值以两列为条件

ruby - while 循环和 Mechanize Ruby 的问题

java - 循环不执行多次

java - 如何销毁Java Process的子进程

java - Playframework 2 作为 SOAP 服务器