java中wait和sleep的区别(多线程编程)

Posted mrchi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中wait和sleep的区别(多线程编程)相关的知识,希望对你有一定的参考价值。

sleep是thread中的一个方法,wait是object中的方法。

sleep是让一个线程进入休眠状态,在等待一段时间之后,进入可运行状态,等待cpu分配资源并运行。同时sleep的过程中,有可能会被线程间的消息传递,也就是有可能被其他对象调用他的interrupt(),产生InterruptedException异常如果你的程序不捕获这个异常,线程就会异常终止,进入TERMINATED状态,如果你的程序捕获了这个异常,那么程序就会继续执行catch语句块(可能还有finally语句块)以及以后的代码。  

注意sleep()方法是一个静态方法,也就是说他只对当前对象有效,通过t.sleep()让t对象进入sleep,这样的做法是错误的,它只会是使当前线程被sleep 而不是t线程 。

wait属于Object的成员方法,一旦一个对象调用了wait方法,必须要采用notify()和notifyAll()方法唤醒该进程;如果线程拥有某个或某些对象的同步锁,那么在调用了wait()后,这个线程就会释放它持有的所有同步资源,而不限于这个被调用了wait()方法的对象。wait()方法也同样会在wait的过程中有可能被其他对象调用interrupt()方法而产生  

其实,我们对于sleep和wait最主要的区分就是sleep只是休眠,其并没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

以上是关于java中wait和sleep的区别(多线程编程)的主要内容,如果未能解决你的问题,请参考以下文章

java多线程中sleep和wait的4个区别,你知道几个

java中wait,notify,notifyAll,sleep方法的作用和区别

JAVA-初步认识-第十四章-多线程-wait和sleep的区别

Java多线程 -- 线程的生命周期和状态什么是上下文切换线程死锁避免死锁 sleep() 方法和 wait() 方法的区别和共同点为什么调用 start() 方法会执行 run() 方法

诺禾:诺禾通俗易懂的告诉你java多线程中wait和sleep的区别

java中sleep和wait的区别