【Java】sleep()和wait()有什么区别?
3368
参考答案:
1、sleep()方法是线程类Thread的静态方法,让调用线程进入睡眠状态,让出执行机会给其它线程,等到休眠时间结束后,线程进入就绪状态和其它线程一起竞争CPU执行时间。
因为sleep()是静态的(static修饰的)方法,它不能改变对象的机锁,当一个synchronized块中调用了sleep方法,线程虽然进入休眠状态,但是对象的机锁没有释放,其它线程无法访问这个对象。
因为一个类中的静态资源在类class被java虚拟机加载时就已经被初始化了,而非静态资源要在对象实例化的时候才会被初始化。sleep()方法是静态的,只依赖于类,不依赖于对象,而锁是对象锁,所以不能改变锁。
2、wait()是Object类的方法,当一个线程执行到wait()方法时,它就进入到一个和该对象相关的等待池,同时释放对象的锁,使用其它线程能够访问,可以通过notify,和notifyAll方法来唤醒等待的线程。
wait()、notify()、notifyAll()只能在同步控制方法或者同步控制块里面使用,而sleep()可以在任何地方使用。
sleep()必须捕获异常,而wait()、notify()、notifyAll()不需要捕获异常。
特别声明:本文仅供交流学习 , 版权归属原作者,并不代表游民部落赞同其观点和对其真实性负责。若文章无意侵犯到您的知识产权,损害了您的利益,烦请与我们联系vmaya_gz@126.com,我们将在24小时内进行修改或删除。