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() 中指定了等待的时间到期
相关推荐
职业码农NO.1几秒前
架构模型:企业架构、技术架构、C4模型、TOGAF、互联网模型优缺点分析与学习
学习·架构·系统架构·软件工程
三毛人几秒前
php usdt地址生成
开发语言·php
前端之虎陈随易1 分钟前
基于Go重写的TypeScript 7可以用了
开发语言·golang·typescript
摇滚侠2 分钟前
零基础小白自学 Git_Github 教程,Action CI/CD 完整实践,笔记23
笔记·git·ci/cd
走在路上的菜鸟4 分钟前
Android学Dart学习笔记第九节 Patterns
android·笔记·学习·flutter
魂梦翩跹如雨9 分钟前
P10424 [蓝桥杯 2024 省 B] 好数——Java解答
java·蓝桥杯
编程火箭车21 分钟前
【Java SE 基础学习打卡】20 运算符(下)
java·运算符·编程基础·逻辑运算符·条件判断·三元运算符·关系运算符
cici1587423 分钟前
MATLAB/Simulink单相光伏并网逆变器仿真
开发语言·matlab
Dev7z24 分钟前
基于MATLAB小波分析的图像增强算法及其仿真实现
开发语言·matlab