Java面试题:sleep 和 wait 的区别

sleep() wait() 是 Java 中用于暂停当前线程的两个重要方法,sleep 是让当前线程休眠,不涉及对象类,也不需要获取对象的锁,属于 Thread 类的方法;wait 是让获得对象锁的线程实现等待,前提要获得对象的锁,属于 Object 类的方法。

区别如下:

  • 所属类
    • sleep() 方法属于Thread
    • wait() 方法专属于 Object
  • 锁行为
    • 当线程执行 sleep() 方法时,它不会释放任何锁。也就是说,如果一个线程在持有某个对象的锁时调用了 sleep,它在睡眠期间仍然会持有这个锁。
    • 当线程执行 wait() 方法时,它会释放 它持有的那个对象的,这使得其他线程可以有机会获取该对象的锁。
  • 使用条件
    • sleep() 方法可以在任何地方被调用
    • wait() 方法必须在同步代码块或同步方法中被调用 ,这是因为调 wait() 方法的前提是当前线程必须持 对象的 ,否则会抛出 IllegalMonitorStateException 异常。
  • 唤醒方式
    • sleep():指定时间过后,线程自动唤醒继续执行
    • wait():需要依靠notify()notifyAll() 方法 或者 wait() 中指定了等待的时间到期
相关推荐
想学后端的前端工程师1 分钟前
【Java JVM虚拟机深度解析:从原理到调优】
java·jvm·python
Ricardo_03241 分钟前
关于死锁问题的学习总结
android·java
az3132 分钟前
Spring Bean初始化机制详解
java·spring·bean·初始化
stars-he2 分钟前
二极管峰值包络检波电路仿真学习笔记
笔记·学习
炽烈小老头5 分钟前
【每天学习一点算法 2025/12/25】爬楼梯
学习·算法·动态规划
songyuc7 分钟前
VCD学习笔记
学习
夜泉_ly8 分钟前
期末速通 -Java程序设计基础 -理论
java·开发语言
xiaoxiaoxiaolll9 分钟前
偏振调控新维度!《Advanced Science》梯度下降算法赋能超表面实现24通道3D全息
学习
这是程序猿12 分钟前
基于java的SpringBoot框架汽车销售系统
java·spring boot·spring·汽车·汽车销售网站
SunnyDays101113 分钟前
Java 高效 TXT 转 Word 指南:单文件、批量及格式美化操作
java·txt转word·文本文件转word·文本转word