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() 中指定了等待的时间到期
相关推荐
崇山峻岭之间几秒前
C++ Prime Plus 学习笔记028
c++·笔记·学习
阿猿收手吧!2 分钟前
【C++】cpp虚函数和纯虚函数的声明和定义
开发语言·c++
q_30238195568 分钟前
Python实现基于多模态知识图谱的中医智能辅助诊疗系统:迈向智慧中医的新篇章
开发语言·python·知识图谱
爬山算法13 分钟前
Redis(168) 如何使用Redis实现会话管理?
java·数据库·redis
程语有云17 分钟前
生产事故-那些年遇到过的OOM
java·内存·oom·生产事故
我的xiaodoujiao20 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 31--开源电商商城系统项目实战--加入购物车、提交订单测试场景
python·学习·测试工具·pytest
小菜鸟派大星21 分钟前
电路学习(九)MOS管
学习·硬件·mos管·电路·电路仿真
雨中飘荡的记忆21 分钟前
Spring Test详解
java·后端·spring
梨落秋霜21 分钟前
Python入门篇【输入input】
开发语言·python
wen-pan23 分钟前
Go 语言 GMP 调度模型深度解析
开发语言·go