sleep()方法和wait()方法之间有什么差异?

本文探讨了Java中sleep()和wait()方法的主要区别。sleep()方法使线程暂停指定时间而不释放锁,而wait()方法则导致线程等待,释放锁,直至其他线程调用同一对象的notify()或notifyAll()方法。wait()方法需要在同步块中调用,用于线程间通信,而sleep()通常用于实现时间间隔。
摘要由CSDN通过智能技术生成

sleep()方法用被用于让程序暂停指定的时间,而wait()方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()或者nofifyAl()方法

主要的区别是,wait()释放锁或监视器,然而sleep()不释放任何锁或监视器等。wait被用于线程间通信,而sleep一般来说被用于在执行时引入暂停。

Thread.sleep()让当前线程进入不可运行状态一段时间。线程继续保持它所获取的监视器——即如果线程当前处于同步块或方法中,则没有其他线程可以进入此块或方法。如果另一个线程调用t.interrupt()会唤醒sleep的线程。注意,sleep()是一种静态方法,这意味着它总是影响当前线程(执行睡眠方法的线程)。一个常见的错误是用t.sleep期望不同的线程休眠,但实际上是当前线程休眠。

object.wait()让当前线程进入不可运行状态,如sleep()一样,但不同的是wait方法从一个对象调用,而不是从一个线程调用;我们称这个对象为“锁定对象(lockObj)”。在lockObj.wait()被调用之前,当前线程必须在lockObj上同步(synchronize);然后调用wait()后释放这个锁,并将线程增加到与lockObj相关的“等待名单(wait list)”。然后,另一个在同一个lockObj锁定(synchronize)的方法可以调用lockObj.nofity()。这会唤醒原来等待的线程。基本上,wait() / notify()就像sleep() / interrupt(),只是活动线程不需要直接指向一个睡眠线程,他们只需要共享锁对象(lockObj)。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值