zoukankan      html  css  js  c++  java
  • Java之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不需捕获异常。

  • 相关阅读:
    ajax处理响应(三)
    ajax起步 (二)
    ajax的使用(一)
    css相关用法
    vue 实例的生命周期
    vue中computed与watch的异同
    文本显示,单行超出和多行超出显示省略号
    vue+mui+html5+ plus开发的混合应用底部导航的显示与隐藏
    addEventListener()与removeEventListener(),追加事件和删除追加事件
    原生js中获取this与鼠标对象以及vue中默认的鼠标对象参数
  • 原文地址:https://www.cnblogs.com/liyiran/p/4741347.html
Copyright © 2011-2022 走看看