Thread.sleep()是Java中让当前线程暂停指定毫秒数的静态方法,进入TIMED_WAITING状态且不释放锁,需处理InterruptedException并推荐恢复中断状态。

在 Java 中,Thread.sleep() 是让当前线程暂停执行指定时间(毫秒)的最直接方式。它属于 java.lang.Thread 类的静态方法,调用后当前线程会进入 TIMED_WAITING 状态,不释放已持有的锁,时间一到自动恢复运行。
基本用法与语法
调用格式为:Thread.sleep(long millis) 或 Thread.sleep(long millis, int nanos)(纳秒精度极少使用)。参数 millis 表示休眠的毫秒数,必须 ≥ 0;若为负数,会抛出 IllegalArgumentException。
- 例如:
Thread.sleep(2000);让当前线程暂停 2 秒 - 注意:该方法声明抛出
InterruptedException,必须显式处理——要么用try-catch捕获,要么在方法签名中用throws声明
必须处理 InterruptedException
Thread.sleep() 是可中断的。如果其他线程在此期间调用了当前线程的 interrupt() 方法,它会立即抛出 InterruptedException 并提前退出休眠。这是协作式中断机制的关键体现。
- 推荐做法:捕获异常后通常应恢复中断状态,例如在
catch块中调用Thread.currentThread().interrupt(); - 错误示范:空的
catch (InterruptedException e) {}会丢失中断信号,可能导致线程无法被正常终止
常见使用场景与注意事项
适用于轮询延时、模拟耗时操作、限流等待等简单控制逻辑,但不适用于精确定时或高并发调度。
- 休眠时间是“至少”指定毫秒数,实际暂停可能略长(受系统调度精度和负载影响)
- 不会释放锁,因此不能用于替代
Object.wait()或LockSupport.park()等同步等待 - 避免在循环中频繁调用(如每 10ms 查一次),应优先考虑
ScheduledExecutorService等更健壮的调度方案
一个安全的示例写法
(带中断响应与状态恢复)
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 恢复中断标志
System.err.println("休眠被中断");
return; // 或按需处理中断逻辑
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











