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() 中指定了等待的时间到期
相关推荐
又是忙碌的一天21 小时前
Socket学习
java·学习·socket
windfantasy199021 小时前
青少年编程考级:如何避免过度负担,让考级助力学习?
学习·青少年编程
香吧香21 小时前
Spring boot 中 CommandLineRunner 在服务启动完成后自定义执行
java·spring boot·spring cloud
浓墨染彩霞21 小时前
Java-----多线路
java·经验分享·笔记
清晓粼溪21 小时前
SpringMVC02:扩展知识
java·后端·spring
曹牧21 小时前
Java String[] 数组的 contains
java·开发语言·windows
yong999021 小时前
LSD直线提取算法 MATLAB
开发语言·算法·matlab
qq_124987075321 小时前
基于springboot+vue+mysql的校园博客系统(源码+论文+部署+安装)
java·vue.js·spring boot·mysql·毕业设计
魂梦翩跹如雨21 小时前
P8752 [蓝桥杯 2021 省 B2] 特殊年份——Java解答
java·蓝桥杯
一只专注api接口开发的技术猿21 小时前
构建电商数据中台:基于淘宝 API 关键词搜索接口的设计与实现
大数据·开发语言·数据库