关于sleep()、yield()、wait()三种让线程暂停方法的区别

一、sleep()是让当前真正执行的线程暂停一段时间,并进入阻塞状态

当当前线程调用sleep()方法进入阻塞状态后,在其睡眠状态内,线程不会获得执行的机会,即使系统没有其他可执行路径,处于sleep()中的线程也不会执行

二、yield()方法是Thread类提供的一种静态方法,它可以让当前正在运行的线程暂停,但它不会阻塞该线程,他只是让该线程进入了就绪状态

三、wait() 是object类定义的方法,表示线程等待,一直执行了notify()或notifyAll()后才结束等待

四、sleep()和wait()方法的区别

两种方法都可以让程序进入阻塞状态,从运行状态转变成阻塞状态

区别:解除阻塞的时机不一样

sleep()是自动解除阻塞,唤醒了自动解除阻塞

wait()是不知道阻塞了多长时间,必须另一个线程通过notity()唤醒它

区别2:sleep()睡眠的时候没有释放锁,wait()释放了锁

五、sleep()方法和yield()方法的区别

1.sleep()方法暂停线程后,会给其它线程执行机会,不会理会其它线程的优先级;但yield()方法只能给优先级相同,或者优先级更高的线程执行机会

2.sleep()方法暂停线程后,必须经过阻塞时间才会进入就绪状态;而yield()方法不会将线程转入到阻塞状态,它直接将线程转到就绪状态

3.sleep()方法比yield()方法有更好的移植性,通常不建议使用yield()方法控制并发线程的执行

4.sleep()方法声明抛出了InterruptedExceptions异常,所以调用sleep()方法,要么捕获该异常,要不声明抛出异常

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值