java后端面经--sleep,wait,yield,join的区别

2024-10-29 17:13

sleep和wait的区别

sleep()和wait()方法的最大区别是:

  • sleep()睡眠时,保持对象锁,仍然占有该锁;

  • 而wait()睡眠时,释放对象锁。

提问:调用sleep()函数的时候,线程是否一直占用CPU? 回答:不占用,等待时会把CPU让出来,给其他需要CPU资源的线程使用 不止调用sleep()函数,在进行一些阻塞调用,例如网络编程中的阻塞accept()【等待客户端连接】和阻塞recv()【等待下游回包】也不占用CPU资源

image-20241029170907566

四者都是将,线程暂定,休息,中断,等待。

1,锁池:所有需要竞争同步锁的线程都会放到锁池中。得到同步锁后就会进入就绪队列进行cpu资源分配

2,等待池:调用了wait()后,线程被放到等待池中。只有调用了notify()或notifyAll(),线程才会去竞争同步锁。

sleep(原理:把cpu的执行资格权利释放出去,过了休眠时间再收回,即使该线程有锁,sleep了也不会释放锁)

sleep和wait区别:

1,sleep是Thread的静态本地方法,wait是Object类的本地方法

2,sleep方法不会释放lock,但是wait会释放。

3,sleep不依赖于同步器(synchronize),但是wait需要依赖。

4,sleep不需要被唤醒,但是wait要

5,sleep一般用于当前线程休眠,轮循暂停,wait则多用于多线程中的通信

6,sleep 会让出cpu执行时间,且强制上下午切换,而wait不一定,还有机会进行竞争同步锁

yield执行后,线程从运行状态进入就绪状态,释放cpu的执行权,(将全力给回cpu),但是依然保留cpu的执行资格,所以有可能cpu下次还有可能让该线程执行

join执行后,线程进入阻塞状态。线程b调用a的join(),b进入阻塞队列,知道线程a结束才能运行b。

相关文章
热点文章
精彩视频
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量: