sleep () 和 wait () 有什么区别?

sleep () 方法

  • sleep () 方法是Thread类的静态方法,可以通过Thread.sleep()来调用。

  • 它是线程的一个静态方法,用于让当前线程休眠一段指定的时间。

  • sleep () 不会释放线程持有的锁,因此其他线程无法获得锁资源,可能导致同步问题。 通常用于在指定时间内暂停线程的执行,用于模拟等待或控制执行速度。

wait () 方法

  • wait() 方法是在Object类中定义的实例方法,用于线程间的协调和通信。
  • 调用wait()方法会释放当前线程持有的对象锁,并进入等待状态,直到其他线程调用相同对象的notify()或notifyAll()方法唤醒等待中的线程。
  • wait () 必须在同步块或同步方法中调用,因为它要求当前线程持有对象锁,否则会抛出IllegalMonitorStateException异常。通常用于实现线程间的通信,允许一个线程等待某个条件的满足。

总结

  • sleep () 用于线程休眠,不释放锁,适用于模拟等待或控制线程执行速度。
  • wait () 用于线程间的协调和通信,会释放锁,只能在同步块或同步方法中使用。
相关推荐
苦逼的猿宝2 分钟前
基于springboot的社区团购系统设计(源码+论文)
java·毕业设计·springboot·计算机毕业设计
电魂泡哥3 分钟前
RocketMQ Dledger 集群与 Raft 协议
java·rocketmq·java-rocketmq
行走的蜗牛11 分钟前
【springai】 Model层设计与实现
java·ai编程
认真的薛薛14 分钟前
Linux基础:GitOps发布流程
java·linux·运维
鱼鳞_14 分钟前
苍穹外卖-Day05(Redis)
java·redis
雨落在了我的手上20 分钟前
初识java(九):类和对象(⼀)
java·开发语言
是码龙不是码农22 分钟前
数据库主键选型:为什么别用自增 ID?
java·数据库
北风toto25 分钟前
Jenkins新手入门安装插件全报错
java·运维·jenkins
罗超驿32 分钟前
20.MySQL事务隔离级别示例详解(脏读、不可重复读、幻读)
java·数据库·mysql·面试