• 41 sleep() 和 wait() 有什么区别?


    sleep() 和 wait() 有什么区别?

    答:

    sleep()和wait()都是线程暂停执行的方法。

     

    同步锁的对待不同:(最大区别)

    • sleep()度后,程序并不会不释放同步锁。

    • wait()后,程序会释放同步锁。 使得其他线程可以使用同步控制块或者方法。

    用法的不同:

    • sleep()可以用时间指定来使他自动醒过来。如果时间不到你只能调用interreput()来强行打断。

    • wait()可以用notify()直接唤起。

    • wait,notify,notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用.

    属于不同的类属:

    • sleep()的类是Thread。

    • wait()的类是Object。


     

    原文链接: https://www.jianshu.com/p/70d7674fd861 (图片)
    原文链接: https://www.baidu.com/link?url=yljOJF92CmGGKwSunaRBMYWBvC2W58JjrtQbgOfV0uf2_Po0c1gavL5VR72fo_zs3Cpp-vjorJ1z2SMX74_zKq&wd=&eqid=e0b89b950004e132000000065eab4bfb (同步锁+代码示例)
    原文链接: http://www.360doc.com/content/14/0829/16/15257968_405629320.shtml (拓展资料)

    拓展:

    • sleep是Thread类的静态方法。sleep的作用是让线程休眠制定的时间,在时间到达时恢复,也就是说sleep将在接到时间到达事件事恢复线程执行,例如:
    try{
    System.out.println("I'm going to bed");
    Thread.sleep(1000);
    System.out.println("I wake up");
    }
    catch(IntrruptedException e) {
    }
    

     

    • wait是Object的方法,也就是说可以对任意一个对象调用wait方法,调用wait方法将会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者,例如:
    //Thread 1
    
    try{
    obj.wait();//suspend thread until obj.notify() is called
    }
    catch(InterrputedException e) {
    }
    

     

    其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题

    • 在java.lang.Thread类中,提供了sleep(),

    • 而java.lang.Object类中提供了wait(), notify()和notifyAll()方法来操作线程

    • wait有两种形式wait()和wait(milliseconds).

    wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用

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

     

    • sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
  • 相关阅读:
    坐标转换convertRect
    error this is not a media message!!!
    嵌入式-第一季-第4课
    嵌入式-第一季-第2课
    嵌入式-第一季-第3课
    嵌入式-第一季-第1课
    web-15. 事件与函数
    web-14. 表达式与程序流程
    web-13. 数组和字符串
    数据-第5课-线性表的本质
  • 原文地址:https://www.cnblogs.com/ynzj123/p/12812429.html
Copyright © 2020-2023  润新知