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() 中指定了等待的时间到期
相关推荐
我曾经是个程序员2 分钟前
使用C#生成一张1G大小的空白图片
java·算法·c#
Hacker_Oldv5 分钟前
网络安全攻防学习平台 - 基础关
网络·学习·web安全
raysync8885 分钟前
替代传统FTP传输,镭速大数据传输系统实现安全高效数据流转!
开发语言·安全·php
向阳12186 分钟前
mybatis SqlSessionFactory
java·mybatis
mask哥7 分钟前
算法:LeetCode470_用Rand7()实现Rand10()_java实现
java·开发语言
Suwg20911 分钟前
《手写Mybatis渐进式源码实践》实践笔记(第七章 SQL执行器的创建和使用)
java·数据库·笔记·后端·sql·mybatis·模板方法模式
丁总学Java14 分钟前
优化 invite_codes 表的 SQL 创建语句
java·数据库·sql
cr.sheeper17 分钟前
CTFHUB-web进阶-php
开发语言·php
抓哇FullStack-Junior17 分钟前
设计模式——适配器模式
java·设计模式·适配器模式
herogus丶19 分钟前
【Spring AI】Spring AI Alibaba的简单使用
java·人工智能·spring·ai