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() 中指定了等待的时间到期
相关推荐
@大迁世界1 分钟前
用 popover=“hint“ 打造友好的 HTML 提示:一招让界面更“懂人”
开发语言·前端·javascript·css·html
用户3721574261352 分钟前
Python 实现 HTML 转 Word 和 PDF
java
a587694 分钟前
Java核心概念精讲:TCP与UDP的区别、Java NIO的几个核心组件与HTTP和HTTPS的区别等(46-50)
java·面试·nio
渣哥22 分钟前
ConcurrentHashMap 的 get 要不要加锁?一次“多此一举”的心路历程
java
用户9313560027423 分钟前
文件包含漏洞
笔记
KFCcrazy424 分钟前
嵌入式学习日记(39)51单片机
嵌入式硬件·学习·51单片机
星哥说事30 分钟前
Python自学12 — 函数和模块
开发语言·python
愿你天黑有灯下雨有伞30 分钟前
一种基于注解与AOP的Spring Boot接口限流防刷方案
java·spring boot·后端
MuMuMu#36 分钟前
JAVA NIO学习笔记基础强化学习总结
java·学习·nio
lingggggaaaa41 分钟前
小迪安全v2023学习笔记(七十九讲)—— 中间件安全&IIS&Apache&Tomcat&Nginx&CVE
笔记·学习·安全·web安全·网络安全·中间件·apache