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() 中指定了等待的时间到期
相关推荐
坟头种朵喇叭花4 分钟前
LinkedList与链表
java·数据结构·链表
清酒伴风(面试准备中......)5 分钟前
计算机网络HTTP——针对实习面试
java·笔记·网络协议·计算机网络·http·面试·实习
honvin_5 分钟前
常用List工具类(取交集、并集等等)
java·list·集合·工具类·list交集、并集工具类
2401_853275736 分钟前
LinkedList 源码分析
java·面试·职场和发展
TPCloud10 分钟前
快速利用c语言实现线性表(lineList)
c语言·开发语言·线性表·linelist
如意.75916 分钟前
【C++】—— map 与 set 深入浅出:设计原理与应用对比
开发语言·c++
子非吾喵24 分钟前
IDEA在设置里边更改了JDK版本没生效问题解决
java·ide·intellij-idea
陆业聪29 分钟前
基本数据类型:Kotlin、Dart (Flutter)、Java 和 C++ 的比较
java·flutter·kotlin
程序修理员29 分钟前
2个word内容合并
java·word
醇氧30 分钟前
【idea】更换快捷键
java·ide·intellij-idea