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 分钟前
虚拟机指令第六节
java·linux·服务器
被放养的研究生3 分钟前
WPS 通配符神技:一键上标参考文献 + 中英文自动加空格
笔记·排版·wps·通配符
海盗123412 分钟前
C#上位机开发-S7协议通信
开发语言·c#
STLearner12 分钟前
AI论文速读 | QuitoBench:支付宝高质量开源时间序列预测基准测试集
大数据·论文阅读·人工智能·深度学习·学习·机器学习·开源
小短腿的代码世界16 分钟前
Qt 2D 绘制实战与性能优化深度解析
开发语言·qt·性能优化
FeBaby24 分钟前
ReentrantLock 与 synchronized 底层实现对比图解
开发语言·c#
jaycyj24 分钟前
pytest
开发语言·python
A_aspectJ28 分钟前
【Java基础开发】基于 Java Swing +MySQL + JDBC 版实现图书管理系统
java·开发语言·mysql
TE-茶叶蛋28 分钟前
Spring最核心扩展点:BeanPostProcessor
java·后端·spring
Mr.456728 分钟前
SpringBoot多模块依赖冲突排查与架构优化实战(避坑指南)
java·spring boot·架构