Java面试题 sleep()和wait()有什么区别?

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

1、sleep()方法是线程类Thread的静态方法,让调用线程进入睡眠状态,让出执行机会给其它线程,等到休眠时间结束后,线程进入就绪状态和其它线程一起竞争CPU执行时间。

因为sleep()是静态的(static修饰的)方法,它不能改变对象的机锁,当一个synchronized块中调用了sleep方法,线程虽然进入休眠状态,但是对象的机锁没有释放,其它线程无法访问这个对象。

2、wait()是Object类的方法,当一个线程执行到wait()方法时,它就进入到一个和该对象相关的等待池,同时释放对象的锁,使用其它线程能够访问,可以通过notify,和notifyAll方法来唤醒等待的线程。

wait()、notify()、notifyAll()只能在同步控制方法或者同步控制块里面使用,而sleep()可以在任何地方使用。

sleep()必须捕获异常,而wait()、notify()、notifyAll()不需要捕获异常。

猜你喜欢

转载自blog.csdn.net/weixin_44296929/article/details/108324925