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() 中指定了等待的时间到期
相关推荐
骇客野人几秒前
.gitignore文件常用设置
java
lkbhua莱克瓦243 分钟前
项目知识——Next.js App Router体系
开发语言·javascript·项目知识
QT 小鲜肉4 分钟前
【孙子兵法之下篇】010. 孙子兵法·地形篇
人工智能·笔记·读书·孙子兵法
bill4479 分钟前
BPMN2.0,flowable工作流,【用户任务】使用【任务监听器】动态设置下一步处理人
java·工作流引擎·flowable·bpmn
Cricyta Sevina9 分钟前
Java 语言多线程核心概念全解析
java·开发语言
缘三水16 分钟前
【C语言】15.指针(5)
c语言·开发语言·指针·语法
爱吃大芒果17 分钟前
从零开始学 Flutter:状态管理入门之 setState 与 Provider
开发语言·javascript·flutter
shenzhenNBA18 分钟前
如何在python文件中使用日志功能?简单版本
java·前端·python·日志·log
weixin_4093831221 分钟前
简单四方向a*寻路学习记录3 将角色世界坐标传给地图数组 计算上下左右四个格子到目的地的f 选择最小的f方向
学习·a星