thread.sleep(long millis) 是 java 中让当前线程休眠指定毫秒数的最常用方法,会使其进入 timed_waiting 状态且不释放锁,需处理 interruptedexception。

在 Java 中,让当前线程休眠指定毫秒数,最常用、最直接的方式是调用 Thread.sleep(long millis) 方法。
使用 Thread.sleep() 休眠当前线程
该方法会让当前正在执行的线程暂停运行指定的毫秒数(注意:不是精确到毫秒级的严格等待,受系统调度影响,实际休眠时间可能略长)。它声明在 Thread 类中,是静态方法,调用时无需实例化线程对象。
- 参数
millis表示休眠的毫秒数,例如Thread.sleep(1000)表示休眠 1 秒。 - 该方法会抛出
InterruptedException,必须显式处理(捕获或向上抛出)。 - 休眠期间线程处于
TIMED_WAITING状态,不释放已持有的锁(比如 synchronized 锁)。
基本写法示例
推荐写法(捕获异常):
try {Thread.sleep(500); // 休眠 500 毫秒
} catch (InterruptedException e) {
// 当前线程被其他线程中断时会进入这里
Thread.currentThread().interrupt(); // 建议恢复中断状态
}
注意事项
-
不要用它替代定时器或异步任务:它只是阻塞当前线程,不适合做周期性任务或后台调度;应优先考虑
ScheduledExecutorService。 -
避免在循环中盲目 sleep:如需轮询,注意控制频率,并考虑是否可用更高效的等待机制(如
wait/notify、CountDownLatch、BlockingQueue等)。 - sleep(0) 是合法的,它会主动让出 CPU 时间片,给其他同优先级线程运行机会(但不保证立即切换)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











