1. 概述

在本篇简明教程中,我们将探讨在 Java 中创建无限循环的几种方式。

简单来说,无限循环指的是在缺少终止条件或条件永远无法满足时,持续执行的一段代码块。虽然大多数情况下无限循环是由于编码疏忽导致的“踩坑”,但在某些场景下也可能是有意为之——比如守护线程轮询、事件监听、游戏主循环等。

关键点在于:
✅ 无限循环本身不是“错误”,关键看使用场景
❌ 误用会导致 CPU 占用飙高,服务无响应(踩坑警告⚠️)

2. 使用 while

最直观、也最常见的方式是使用 while(true)

public void infiniteLoopUsingWhile() {
    while (true) {
        // 执行任务,例如监听队列消息
        System.out.println("Running...");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            break;
        }
    }
}

这种方式逻辑清晰,一眼就能看出是故意写的无限循环,可读性强,是推荐写法。

3. 使用 for

另一种经典写法是省略 for 循环的初始化、条件判断和更新语句:

public void infiniteLoopUsingFor() {
    for (;;) {
        // 例如:持续处理任务
        processTask();
    }
}

这种写法等价于 while(true),语法上更“极简”,在 C/C++ 中很常见。虽然在 Java 中也能用,但部分团队编码规范会限制这种写法,认为不够直观。

💡 小贴士:for(;;) 是 JVM 层面公认的无限循环模式,甚至某些 JVM 会做特殊优化。

4. 使用 do-while

尽管不常用,但 do-while 也能构造无限循环:

public void infiniteLoopUsingDoWhile() {
    do {
        // 至少执行一次的任务
        handleStartupTask();
    } while (true);
}

这种结构适用于必须先执行一次逻辑,再进入无限循环的场景。比如初始化完成后持续监听状态变化。

⚠️ 注意:除非真有“至少执行一次”的语义需求,否则没必要用 do-while,反而增加理解成本。

5. 总结

方式 可读性 推荐度 适用场景
while(true) ✅ 高 ⭐⭐⭐⭐☆ 通用首选
for(;;) ⚠️ 中 ⭐⭐⭐☆☆ 极简风格,部分团队禁用
do-while(true) ❌ 低 ⭐⭐☆☆☆ 必须首次执行的特殊逻辑

实际开发中,建议统一使用 while(true),清晰明了,不易引发歧义。

示例代码已托管至 GitHub:https://github.com/baeldung/core-java-modules/tree/master/core-java-lang

📌 最后提醒:
使用无限循环时,务必确保有合理的退出机制(如中断信号、关闭标志位),否则可能导致服务无法优雅停机——别让一个 while(true) 搞崩整个应用!


原始标题:Infinite Loops in Java