java中暂停当前线程最常用thread.sleep()方法,它使当前线程休眠指定毫秒数且不释放锁;支持纳秒精度重载,但需处理interruptedexception并恢复中断状态;该方法为静态,只能通过thread.sleep()调用。

在 Java 中,让当前线程暂停执行一段时间,最常用的方式是调用 Thread.sleep() 方法。
基本用法:指定毫秒数休眠
调用 Thread.sleep(long millis) 可使当前线程进入休眠状态,单位为毫秒。例如:
-
Thread.sleep(1000);—— 休眠 1 秒 -
Thread.sleep(500);—— 休眠 0.5 秒
该方法不会释放已持有的锁(比如 synchronized 锁),只是让 CPU 暂时放弃执行权。
带纳秒精度的重载版本
还可以使用 Thread.sleep(long millis, int nanos) 提供更精细的控制:
- 例如
Thread.sleep(1000, 500000);表示休眠 1000 毫秒 + 500000 纳秒(即约 1.0005 秒) - 注意:nanos 参数只在 0–999999 范围内有效,超出会被忽略或进位到毫秒
必须处理 InterruptedException
sleep() 是一个可能被中断的阻塞方法,因此必须捕获或声明 InterruptedException:
- 常见写法是用 try-catch 包裹:
Thread.sleep(2000);
} catch (InterruptedException e) {
// 线程被其他线程调用 interrupt() 中断时会抛出此异常
Thread.currentThread().interrupt(); // 推荐:恢复中断状态
}
不要空 catch 或直接忽略该异常,否则会丢失中断信号,影响线程协作逻辑。
不能在静态上下文或任意对象上调用
sleep() 是静态方法,只能通过 Thread.sleep(...) 调用,它总是让当前正在执行的线程休眠,和哪个 Thread 实例无关:
- 错误写法:
someThread.sleep(1000);(编译不报错但语义错误) - 正确写法:
Thread.sleep(1000);(始终作用于当前线程)
即使在 Runnable 或 Lambda 中,也只需直接调用 Thread.sleep(...) 即可。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











