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

2021-03-02 16:27

阅读:476

标签:对象锁   对象   相同   notify   试题   代码   同步方法   需要   的区别   

摘要:介绍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()。

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

标签:对象锁   对象   相同   notify   试题   代码   同步方法   需要   的区别   

原文地址:https://www.cnblogs.com/east7/p/14404176.html


评论


亲,登录后才可以留言!