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() 中指定了等待的时间到期
相关推荐
2301_803110139 分钟前
项目小总结
java
ignativs amor10 分钟前
Python redis 安装和使用介绍
开发语言·redis·python
你可以自己看12 分钟前
Python在数据科学与机器学习中的应用
开发语言·python·机器学习
Jacky-YY13 分钟前
教你如何在Java中操作Redis
java·开发语言·redis
JOJO___14 分钟前
Spring AOP 总结
java·后端·spring·java-ee
红花与香菇2____1 小时前
【学习笔记】STM32F407探索者HAL库开发(四)F103时钟系统配置
c语言·笔记·stm32·单片机·嵌入式硬件·学习
大白的编程日记.1 小时前
【C++笔记】C++编译器拷贝优化和内存管理
java·开发语言·c++·笔记
JovaZou1 小时前
[Python学习日记-26] Python 中的文件操作
开发语言·python·学习
CrazyZ1262 小时前
c++primer第九章内存模型和名称空间学习笔记
c++·笔记·学习
LvManBa2 小时前
Vue学习记录之五(组件/生命周期)
javascript·vue.js·学习