• 面试题:Java中sleep和wait方法的区别


    摘要:介绍sleep方法和wait方法的相同点和区别。

      在JAVA多线程的学习中,不少人会把函数sleep和wait搞混,傻傻分不清,简单粗暴地认为都是使得线程进入等待状态,比如就分不清方法sleep(long)和wait(long)。下面主要介绍sleep方法和wait方法的相同点和区别。

      关于sleep() 和 wait()方法的异同点是什么的问题,首先需要明白的是sleep()是Thread的静态本地方法,wait()是Object的成员方法,由此可知,二者是有本质区别的。

    相同点: 一旦执行方法,都可以使得当前的线程进入等待状态。

    不同点

    1. 声明的位置不同,sleep()声明在Thread 类,wait()声明在Object 类;
    2. 关于是否可以指定睡眠时间,sleep函数必须指定,wait可以指定也可以不指定;
    3. sleep() 会让当前正在运行的、占用CPU时间片的线程挂起指定时间,休眠时间到自动苏醒进入可运行状态;切记,是不会由睡眠状态直接变为运行状态的。wait() 方法用来线程间通信,如果设置了时间,就等待指定时间;如果不设置,则该对象在其它线程被调用 notify() / notifyAll() 方法后进入可运行状态,才有机会竞争获取对象锁。
    4. 适用场景不同,sleep()可以在任何需要的场景下调用,wait()必须在同步代码块中或者同步方法中的监视器中。
    5. 关于是否释放同步监视器,如果两方法都是使用在同步代码块或同步方法中,sleep()不会释放锁,wait()会释放锁,并进入线程等待池。
    6. sleep()线程控制自身流程。wait()用来线程间通信,使拥有该对象锁的线程等待直到指定时间或notify()。

      读后有收获,小礼物走一走,请作者喝咖啡。

    赞赏支持

  • 相关阅读:
    Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 报错及解决办法
    Design editor is unavaiable until next gradle sync报错及解决办法
    mkdir创建目录失败
    读书笔记之梦断代码(三)
    Android学习——更新数据
    Android学习——添加数据
    Android学习——升级数据库
    Android学习——创建数据库
    开课第十一周周总结
    Android学习——数据库简介
  • 原文地址:https://www.cnblogs.com/east7/p/14404176.html
Copyright © 2020-2023  润新知