sleep和wait的区别 5 个区别

sleep和wait差异(检查方向是否会释放锁) 5 差异

sleep()方法是Thread类中wait()方法是Object类中的方法。

sleep()该方法导致程序暂停执行的指定时间cpu给其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态,在调用sleep()在方法过程中,线程不释放对象锁。当调用时wait()方法时,线程会放弃对象锁,进入等待对象的等待锁池,只调用对象notify()方法后,本线程进入对象锁定池准备

区别1:使用限制

它可以在任何地方使用,但需要捕获 InterruptedException 异常

wait 方法必须放在 synchronized 块也需要捕获 InterruptedException 异常,需要锁定物体。也可以使用带时间的 wait(long millis) 方法,时间一到,就不需要其他线程来唤醒

区别2:使用场景

sleep 一般用于当前线程休眠或轮流暂停操作,wait 多用于多线程之间的通信。

区别3:属类

sleep 是 Thread 类静态本地方法,wait 则是 Object 本地方法。

区别4:释放锁

wait 可以释放当前线程对 lock 持有物体锁, sleep 则不会。

区别5:线程切换

sleep 会让出 CPU 执行时间和强制上下文切换, wait 不一定,wait 之后可能还有机会重新竞争到锁继续执行。

Copyright © All Rights Reserved

扫码免费用

源码支持二开

申请免费使用

在线咨询