【线程】sleep、wait的区别

sleep和wait的区别

1.关于位置

        sleep是Thread类的静态本地方法

        wait是Object类的本地方法

2.是否会释放锁

        sleep方法不会释放lock

        就是把cpu的执行资格和执行权释放出去,不再运行子线程,当定时的时间结束再取回cpu资源,参与cpu调度(休眠时进入超时等待状态,休眠结束后先进入等待阻塞状态,获取到锁后进入就绪状态)

        wait会释放lock,而且会将线程放入等待队列中

        wait方法会释放lock,当调用无参的wait方法时,会进入等待状态,当调用有参的wait方法时,会进入超时等待状态,其他与sleep相同

3.调用位置

        sleep可以不在synchronized的块下使用

        wait只能在synchronied的块下使用

4.是否需要被唤醒

        sleep不需要被唤醒

        wait再不指定长度的时候需要被唤醒 

5.作用

        sleep一般用于线程的休眠,或者轮循暂停操作

        wait一般用于多线程之间的通讯

6.关于执行  

        sleep会让出CPU的执行时间并且强制执行上下文切换(关于上下文切换,看这篇文章

        wait则不一定,wait结束后可能还是有机会重新竞争到锁继续执行的

        (这里理解的不是很透彻,自我感觉是sleep时CPU明确知道这个线程以后会回来,所以会保存这个线程的上下文,但是wait以后不一定能回来,所以不保存上下文?)

JAVA中调用Thread类的sleep()方法后,当前线程进入阻塞状态还是等待状态? - 知乎

膜拜!华为大牛透彻讲解Java面试100道必考题,不管你工作几年,都得看看!现在免费分享给大家!_哔哩哔哩_bilibili

上一篇:epoll水平触发与边缘触发


下一篇:64. 最小路径和