isalive()是最标准可靠的线程存活判断方式,返回true表示已启动且未终止(处于runnable、waiting、timed_waiting或blocked状态),false表示未启动(new)或已结束(terminated)。

用 isAlive() 方法就能直接判断线程是否存活,这是最标准、最可靠的方式。
isAlive() 的作用和返回值含义
该方法是 Thread 类的 final 实例方法,返回 boolean:
-
true:线程已启动(调用了start()),且尚未自然终止或因异常退出;此时线程处于RUNNABLE、WAITING、TIMED_WAITING或BLOCKED状态中的任意一种; -
false:线程从未启动(NEW状态),或已经执行完毕/异常终止(TERMINATED状态); - 注意:
isAlive()不区分“正在运行”还是“正在等待”,只要没彻底结束就返回true。
常见误判场景与注意事项
以下情况容易让人误解线程状态,需特别留意:
- 线程刚创建但还没
start():此时isAlive()返回false(属于NEW状态,不算存活); - 线程已
start()但run()方法还没真正开始执行(如被调度延迟):仍可能短暂返回false,但极短,通常可忽略; - 主线程中反复调用
isAlive()判断子线程时,若未加同步或延时,可能因执行太快而看到false → true → false的跳变; -
isAlive()和getState()配合使用更稳妥:例如先确认isAlive() == true,再用getState()查看具体处于RUNNABLE还是WAITING。
简单实用示例
下面代码能清晰展示不同阶段的返回值:
(省略 import 和 class 声明)Thread t = new Thread(() -> {
try { Thread.sleep(1500); }
catch (InterruptedException e) { Thread.currentThread().interrupt(); }
});
System.out.println("创建后:" + t.isAlive()); // false(NEW)
t.start();
System.out.println("start后立即:" + t.isAlive()); // true(大概率)
try { t.join(500); } catch (InterruptedException e) {}
System.out.println("join 500ms 后:" + t.isAlive()); // true(仍在睡)
try { t.join(); } catch (InterruptedException e) {}
System.out.println("完全结束后:" + t.isAlive()); // false(TERMINATED)Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











