首页 > 自考资讯 > 自考资讯

采访者:同样在等待。睡眠和等待有什么区别?

2024-10-09

这篇文章给大家聊聊关于采访者:同样在等待。睡眠和等待有什么区别?,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

sleep是Thread类的方法,wait是Object类的方法

sleep方法可以在任何地方使用,wait只能在synchronized方法或synchronized块中使用

最重要的本质区别

Thread.sleep只会让出CPU,不会释放对象锁

Object.wait不仅让出了CPU,还释放了对象锁。只有在该对象上调用了notify()方法或者时间到了才能再次执行。

代码演示

删除了try catch 部分以方便快速理解。

输出是

采访者:同样在等待。睡眠和等待有什么区别?

线程A正在等待获取锁

线程A获得锁

线程B正在等待获取锁

线程A完成

线程B获得锁

线程B完成

从输出中,您可以看到Thread.sleep不会释放锁,因为A在获得锁之前完成了B。

我们改变sleep和wait,输出是

采访者:同样在等待。睡眠和等待有什么区别?

线程A正在等待获取锁

线程A获得锁

线程B正在等待获取锁

线程B获得锁

线程B完成

线程A完成

用户评论

凉凉凉”凉但是人心

楼主说的对啊!一直觉得这三个都是类似的概念,搞得我都不知道怎么区分了,终于看到了这个问题,现在明白差别在哪了!

    有8位网友表示赞同!

你是梦遥不可及

我当初面试的时候也遇到过这样的问题,当时一脸蒙蔽。其实仔细想想还是能理解。感觉线程之间的阻塞和非阻塞机制就决定了sleep和wait的不同

    有5位网友表示赞同!

夏日倾情

面试官这把题出得挺好,真的考验你的深入理解!我觉得除了楼主说的这些以外,还有个很关键的区别就是:在多线程环境下,wait()操作需要加锁才能完成释放锁的操作。而sleep并不是主动放弃锁的,只是把当前线程挂起而已。

    有6位网友表示赞同!

珠穆郎马疯@

我记得以前看博客的时候看过关于这三个概念的详细解释,当时觉得很难懂,现在看来还是有那么点儿意思,“等待”确实是一个比较宽泛的概念

    有19位网友表示赞同!

温柔腔

面试官真是太厉害了!这个问题的确让我有些懵。我现在是在学习Java的多线程技术,希望能够掌握这些知识,到时候再遇到这样的问题就不会慌张了。

    有9位网友表示赞同!

拥菢过后只剰凄凉

这种面试题真让人提心吊胆!不过我觉得,理解sleep、wait和sleep的区别其实就是理解不同状态下线程的运行方式,挺有挑战性的

    有7位网友表示赞同!

回忆未来

感觉还是楼主解释得比较清楚,我之前一直以为这三个功能差不多,现在终于明白了区别! 感谢楼主分享!

    有10位网友表示赞同!

短发

这个解释虽然简单,但却能够概括sleep、wait和sleep的主要区别。 对于初学者来说,理解这些概念非常重要,能帮助我们更好地掌握多线程编程

    有20位网友表示赞同!

聽風

面试题真是太难了!有时候我怀疑自己是不是学错了?不过还是要好好学习才能胜任这个行业吧!

    有14位网友表示赞同!

十言i

感觉每次去面试都怕遇到这类难题,希望能够通过认真学习和积累经验来解决这些问题。 真的需要花更多时间去深入理解多线程知识!!

    有12位网友表示赞同!

陌颜幽梦

同意楼主的观点,sleep、wait和阻塞之间确实存在区别。 这种题考的是你对线程状态的理解, 面试时要保持冷静,从基础概念开始说穿。

    有19位网友表示赞同!

暖栀

我最近也在学习java的多线程编程知识,这个解释真的很有帮助!感觉学到了很多,谢谢楼主分享哦!

    有8位网友表示赞同!

(り。薆情海

面试官太厉害了!这种题考得太深了,我觉得大部分程序员都难回答。 不过还是需要不断的积累经验和学习新的知识。

    有16位网友表示赞同!

我的黑色迷你裙

我之前也遇到类似的问题,当时真的很难理解sleep、wait和阻塞的区别。 觉得楼主解释的的很清楚,受益匪浅!

    有18位网友表示赞同!

像从了良

这种面试题太考验人心理承受能力了! 你说的太对了,在面试过程中要展现出思维清晰,逻辑严密的思路

    有7位网友表示赞同!

安陌醉生

我觉得多线程编程确实是一门非常重要的技术, 要好好学习才能深入掌握它的精髓。 理解sleep、wait和阻塞的区别,对于掌握多线程的运行机制至关重要。

    有19位网友表示赞同!

败类

其实我个人觉得,面试官提这样的问题就是为了考验你的思维能力和解决问题的能力, 而不是单纯地考察你的知识储备程度。

    有17位网友表示赞同!

高冷低能儿

学习多线程编程确实很不容易啊! 要不断地练习才能熟练掌握这些知识。 你说的对,在面对面试时要保持冷静思考,用逻辑表达自己的思路。 ,多看多练吧!

    有14位网友表示赞同!

猜你喜欢