sleep和wait区别(线程基本必问的)

     这个问题在面试线程方面的知识时,基本上属于必问的问题。因此这里有必要做一个较为详细的总结。

   区别一

                 首先需要明白的是这两个方法根本来自不同的类,sleep来自Thread,wait来自Object类。

                 sleep是Thread提供的一个静态方法,该方法出现在那个线程中,那个线程就"睡觉",并非是

           调用该方法的线程睡觉,例如a线程中调用线程b.sleep(),a线程睡觉。

    区别二

                 最为主要的区别是sleep方法没有释放“锁”,而wait方法释放了"锁"不然的话就会形成死锁了。

                 sleep是不让出系统资源的;wait是线程交互时,如果线程a对一个同步对象x发出一个wait

        调用该线程会进入线程等待池等待,需要等其他线程调用notify/notifyAll唤醒,或者指定的时间过后

        自动唤醒。

                  这里还需明白一点的就是无论是sleep设置的时间到了,还是wait之后被唤醒了,线程并

       不一定立即恢复执行,而是触发"操作系统重新进行一次CPU竞争"。

    区别三

            使用范围不一样(将这作为区别略微牵强了)

             wait、notify/notifyAll必须在同步控制块、同步方法里面使用。而sleep的使用在任意地方。

               synchronized(x){
                 x.notify()
                 //或者wait()
                 }

    区别四

             代码表现上sleep必须捕获异常,而wait不需捕获异常。



  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值