最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

大厂面试题:说说wait()和sleep()的区别

XAMPP新闻 admin 81浏览 0评论

一、得分点

属的类型不同、对锁的依赖不同、返回的条件不同

二、标准回答

wait()和sleep()方法主要有如下三个区别:

  1. 所属的类型不同 – wait()是Object类的实例方法,调用该方法的线程将进入WTING状态。- sleep()是Thread类的静态方法,调用该方法的线程将进入TIMED_WTING状态。
  2. 对锁的依赖不同 – wait()依赖于synchronized锁,它必须通过监视器进行调用,在调用后线程会释放锁。- sleep()不依赖于任何锁,所以在调用后它也不会释放锁。
  3. 返回的条件不同 – 调用wait()进入等待状态的线程,需要由notify()/notifyAll()唤醒,从而返回。- 调用sleep()进入超时等待的线程,需要在超时时间到达后自动返回。

三、加分回答

wait()方法也支持超时参数,线程调用带有超时参数的wait()会进入TIMED_WTING状态,在此状态下的线程可以通过notify()/notifyAll()唤醒从而返回,若在达到超时时间后仍然未被唤醒则自动返回。如果采用Lock进行线程同步,则不存在同步监视器,此时需要使用Condition的方法实现等待。
Condition对象是通过Lock对象创建出来的,它的await()方法会导致线程进入WTING状态,它的带超时参数的await()方法会导致线程进入TIMED_WTING状态,当调用它的signal()/signalAll()方法时,线程会被唤醒从而返回。

转载请注明:XAMPP中文组官网 » 大厂面试题:说说wait()和sleep()的区别

您必须 登录 才能发表评论!