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() 中指定了等待的时间到期
相关推荐
招财进宝。。2 分钟前
c# 获取电脑 分辨率 及 DPI 设置
开发语言·c#·电脑
会飞的架狗师4 分钟前
【SpringBoot实战】优雅关闭服务
java·spring boot·后端
无处不在的海贼5 分钟前
小明的Java面试奇遇之:支付平台高并发交易系统设计与优化[特殊字符]
java·开发语言·面试
居居飒9 分钟前
深入理解 JDK、JRE 和 JVM 的区别
java·开发语言·jvm
Bro_cat17 分钟前
JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口
java·jvm
几道之旅17 分钟前
python-pptx去除形状默认的阴影
开发语言·javascript·python
蒙奇D索大20 分钟前
【11408学习记录】考研英语写作提分秘籍:2013真题邀请信精讲+万能模板套用技巧
笔记·学习·考研·改行学it
椰椰椰耶25 分钟前
[网页五子棋][匹配模块]前后端交互接口(消息推送机制)、客户端开发(匹配页面、匹配功能)
java·spring boot·json·交互·html5·web
1560820721926 分钟前
在QT环境下部署FFT库
开发语言·qt
梁小呆瓜36 分钟前
掌握Jackson的灵活扩展:@JsonAnyGetter与@JsonAnySetter详解
java·spring boot·json