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号8 分钟前
【c++】——c++编译的so中函数有额外的字符
java·服务器·c++
wangan09417 分钟前
不带圆圈的二叉树
java·前端·javascript
ku_code_ku21 分钟前
python bert_score使用本地模型的方法
开发语言·python·bert
嗷嗷哦润橘_25 分钟前
AI Agent学习:MetaGPT之我的工作
人工智能·学习·flask
小马哥编程27 分钟前
【软考架构】滑动窗口限流算法的原理是什么?
java·开发语言·架构
云栖梦泽34 分钟前
鸿蒙数据持久化实战:构建本地存储与云同步系统
开发语言·鸿蒙系统
知识分享小能手40 分钟前
CentOS Stream 9入门学习教程,从入门到精通,Linux日志分析工具及应用 —语法详解与实战案例(17)
linux·学习·centos
wjs202440 分钟前
《Ionic 侧栏菜单》
开发语言
祁思妙想41 分钟前
linux常用命令
开发语言·python
饕餮争锋1 小时前
Spring AOP原理简析
java·spring