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 之后可能还有机会重新竞争到锁继续执行。
扫码咨询与免费使用
扫码免费用
申请免费使用
在线咨询