thread.sleep()让当前线程暂停指定毫秒数,不释放锁、不占用cpu,需处理interruptedexception;调用为静态方法,作用于当前线程,参数为负数抛illegalargumentexception,实际休眠时间可能略长于指定值。

Java 中线程休眠用 Thread.sleep() 方法,它会让当前正在执行的线程暂停指定毫秒数,期间不占用 CPU,但不释放已持有的锁。
sleep 方法的基本用法
调用方式很简单,直接在需要暂停的线程中写:
-
Thread.sleep(1000);—— 暂停 1 秒(1000 毫秒) -
Thread.sleep(500, 500000);—— 暂停 500 毫秒 + 500000 纳秒(即约 500.5 毫秒)
注意:该方法属于静态方法,作用于当前线程,不是某个线程对象。即使你写 someThread.sleep(),实际也是让当前线程休眠,someThread 只是调用者,不起控制作用。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
必须处理 InterruptedException
sleep() 声明抛出 InterruptedException,这是受检异常,必须显式处理:
- 用
try-catch捕获并合理响应(比如退出循环、清理资源) - 不能简单地用
throws往上推,尤其在线程运行逻辑中不推荐
常见写法示例:
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// 当前线程被中断,通常应结束该线程的任务
System.out.println("线程被中断,准备退出");
return; // 或 break; 看具体上下文
}
sleep 不释放锁,和 wait 的关键区别
如果当前线程正持有 synchronized 锁(比如在同步块或同步方法里),调用 sleep() 后仍会一直持有该锁,其他线程无法进入同一同步区域。
- 而
wait()会释放锁,并进入等待队列,需配合notify()唤醒 - 所以不要用
sleep()替代线程间协作,它只适合“我先歇会儿”,不是“我让出资源等通知”
实际使用注意事项
- 时间参数为负数会抛
IllegalArgumentException - 休眠时间是“至少”暂停这么久,实际可能更长(受系统调度影响)
- 在循环中休眠时,建议每次休眠前检查线程是否已被中断,避免盲目等待
- 避免在高频短休眠场景(如忙等)中滥用,可考虑
LockSupport.parkNanos()等更轻量机制
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










