【校招VIP】操作系统考点之sleep和wait

102 阅读3分钟
考点介绍:

多线程可以说是 Java 进阶必备的知识点了,也是面试中必备的考点。可能不少人能对多线程说上一二,但这还远远不够,如果碰到比较有经验的面试官再继续追问,很可能会被吊打。

本期分享的操作系统考点之sleep和wait,分为试题、文章以及视频三部分。

答案详情解析和文章内容可扫下方二维码或链接即可查看!

一、考点题目

1.关于sleep()和wait(),以下描述错误的一项是()

A.sleep是线程类(Thread)的方法,wait是Object类的方法
B.Sleep不释放对象锁,wait放弃对象锁
C.Sleep暂停线程、但监控状态任然保持,结束后会自动恢复
D.Wait后进入等待锁定池,只针对此对象发出notify方法后获取对象锁进入运行状态

正确答案: D

2.sleep和wait方法有什么区别?

正确答案: 共同点:

  1. 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。\
  2. wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException。 如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程。 需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用 interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到 wait()/sleep()/join()后,就会立刻抛出InterruptedException 。

3.为什么wait要定义在Object中,而不定义在Thread中?

正确答案:线程为了进入临界区(也就是同步块内),需要获得锁并等待锁可用,它们并不知道也不需要知道哪些线程持有锁,它们只需要知道当前资源是否被占用,是否可以获得锁,所以锁的持有状态应该由同步监视器来获取,而不是线程本身。

4.阿里面试题:wait为什么一定要写在同步块中?

正确答案:第一点:wait 会引起lost wake up问题,就是如果wait 和 notify写在同一个synchronized对象中话,会出现发送notify的之后,另外一个该对象的才刚刚调用wait方法,这就导致调用wait的对象一直无法被显式唤醒。

(扫下方海报二维码查看完整版答案)

二、考点文章

1.sleep( ) 和 wait( ) 的这5个区别,你知道几个?

区别5:线程切换

sleep 会让出 CPU 执行时间且强制上下文切换,而 wait 则不一定,wait 后可能还是有机会重新竞争到锁继续执行的。

(扫下方海报二维码查看完整版)

三、考点视频

进程和线程的关系?

更多资讯可搜索校招VIP小程序查看哦。

PC端链接:xiaozhao.vip/dTopic/deta…

移动端链接:m.xiaozhao.vip/dTopic/deta…