百摩网
当前位置: 首页 生活百科

面试死亡问题有哪些(面试官什么是死锁)

时间:2023-05-30 作者: 小编 阅读量: 11 栏目名: 生活百科

面试官什么是死锁目录什么是死锁?死锁产生原因?如何使用IDEA查看程序是否产生死锁?如何避免死锁?什么是死锁?死锁是一种非常严重的bug,是说多个线程同时被阻塞,线程中的一个或者多个又或者全部都在等待某个资源被释放,。

目录

什么是死锁?

死锁产生原因?

如何使用IDEA查看程序是否产生死锁?

如何避免死锁?

什么是死锁?

死锁是一种非常严重的bug,是说多个线程同时被阻塞,线程中的一个或者多个又或者全部都在等待某个资源被释放,造成线程无限期的阻塞,导致程序不能正常终止

️为了进一步说明死锁,有哲学家就餐这样的一个问题:

有一个桌子,哲学家们围成一圈,每两个哲学家中间有一支筷子

哲学家只能两件事:思考或者吃饭,思考时候就不会动筷子,吃饭时会拿起左右手旁边的筷子(先拿左后拿右)

如果有一个哲学家想吃饭,但是筷子被占用,就得等别人吃完进入思考后,才能获得筷子,等待的过程称为阻塞等待

在等待的情形中,会出现下面这样一种情况:所有人都处于等待筷子中,即所有哲学家都获取到左边的筷子,一直获取不到右边的筷子,这种情况称为死锁

死锁产生原因?

结合上述哲学家的例子,说明死锁产生的四个必要条件:

互斥使用:当资源被一个线程使用或者占用时,别的线程不能使用该资源

不可抢占:获取资源的一方,不能从正在使用资源的一方抢占掠夺资源,资源只能被使用者主动释放

请求和保持:资源请求者在请求别的资源时,同时保持对已有资源的占有

循环等待:即p1占有p2的资源,p2占有p3的资源,p3占有p1的资源,这样形成了一个等待环路

上述这四个条件满足即造成的结果就是死锁

️看这样的一段可能产生死锁的代码:

public class DeadLock {public static void main(String[] args) {Object lock1 = new Object();Object lock2 = new Object();Thread t1 = new Thread(){@Overridepublic void run() {try {synchronized (lock1){Thread.sleep(1000);synchronized (lock2){System.out.println("输出t1");}}} catch (InterruptedException e) {e.printStackTrace();}}};Thread t2 = new Thread(){@Overridepublic void run() {try {synchronized (lock2){Thread.sleep(1000);synchronized (lock1){System.out.println("输出t2");}}} catch (InterruptedException e) {e.printStackTrace();}}};t1.start();t2.start();}}

‍️说明:

t1先申请lock1,lock2,释放lock2,lock1

t2后申请lock2,lock1,释放lock1,lock2

这种情况不会产生死锁

t2先申请lock2,lock1,释放lock1,lock2

t1后申请lock1,lock2,释放lock2,lock1

这种情况也不会产生死锁

t1申请到lock1,t2申请到lock2,这样t1就申请不到lock2,t2就申请不到lock1,都等着对方释放资源,这样就产生了死锁

因为让t1,t2申请第一个锁的时候都等待了1秒,所以产生死锁的概率接近100%

运行结果:没有执行输出,产生死锁

如何使用IDEA查看程序是否产生死锁?

第一步:点击下方红圈内的Terminal

第二步:在下方命令窗口输入jconsole,然后回车

第三步:双击发生死锁对应的类

第四步:切换到线程,点击下面的检查死锁

第五步:即可看到发生死锁的线程

如何避免死锁?

死锁的产生必须满足互斥使用,不可抢占,请求和保持,循环等待这四个条件,但是只要破坏其中任意一个条件即可破坏死锁,其中最容易破坏的就是循环等待这个条件,那么如何破坏循环等待这个条件呢?

多个线程约定好一定的顺序,按照这个顺序加锁释放锁

️对上述产生死锁的代码改造:将加锁顺序都改为lock1,lock2,看看打印结果

public class DeadLock {public static void main(String[] args) {Object lock1 = new Object();Object lock2 = new Object();Thread t1 = new Thread(){@Overridepublic void run() {try {synchronized (lock1){Thread.sleep(1000);synchronized (lock2){System.out.println("输出t1");}}} catch (InterruptedException e) {e.printStackTrace();}}};Thread t2 = new Thread(){@Overridepublic void run() {try {synchronized (lock1){Thread.sleep(1000);synchronized (lock2){System.out.println("输出t2");}}} catch (InterruptedException e) {e.printStackTrace();}}};t1.start();t2.start();}}

打印结果:可以看到结果可以正常输出而不产生死锁

小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏 评论转发 关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【111】即可免费获取

版权声明:本文为CSDN博主「Java猿~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_58710208/article/details/124131865

    推荐阅读
  • 地球磁场如何阻挡太阳风(如何给地球降温)

    在天体力学中,拉格朗日点是小质量物体在两个大质量轨道物体影响下的平衡点。在日地系统中,有5个拉格朗日点,并且它们也会受到地月系统的影响。科学家们目前正在讨论多种可能性正如前面所说,在拉L1格朗日点位置,太阳和地球的引力相互抵消,这让放置气泡成为可能。另一名负责人拉蒂表示,地球工程可能是人类最后的也是唯一的选择,现在环境状态不容乐观。

  • 2022年象山中学招生计划+招生人数一览 2022年象山中学招生计划 招生人数一览表图

    按照象山中学体育特长生招生办法执行;③定向分配招生计划302名。定向分配生以校为单位,按各校分配名额和考生志愿从高分到低分择优录取。按符合奖励资格的人数比例分配给教学质量名列前9名的学校。2023年起中考教学质量优胜奖评选办法另行制定。⑤统招名额为504名减去强基计划综合评价招生名额、象山中学体育特长生名额、定向分配名额、教学质量优胜奖名额后剩下的人数。

  • 番薯干热量(番薯干是什么做的)

    我们一起去了解并探讨一下这个问题吧!番薯干热量番薯干热量:338?红薯干,又称番薯干,地瓜干;是福建连城和山东的传统土特产,备受广大消费者喜爱,原材料是番薯。一般是将整块番薯蒸熟去皮,然后切制、自然晾晒。片状或条状,益气生津等食用和药用功能,被联合国誉为最健康的食品。白霜为地瓜干自然散发的糖分,请放心食用。

  • 怎么分清自己是什么脸型(怎么区分你属于什么脸型)

    方形脸也叫国字脸,表现为额头、颧骨、下颌角的宽度基本相等,棱角分明,面部轮廓方宽短,缺乏秀丽柔美之感。圆形脸表现为额头、颧骨、下颌角的宽度基本相等,棱角圆润丰满,像婴儿一般。面部轮廓宽且圆,容易给人幼稚的感觉。长形脸脸型比较瘦长,额头、颧骨、下颌的宽度基本相同,但脸宽小于脸长的三分之二。与鹅蛋脸相比,瓜子脸的下巴更尖,脸形似瓜子,显得清秀,而鹅蛋脸相对更圆润、丰满。

  • 调侃朋友的幽默句子(有什么调侃朋友的说说)

    调侃朋友的幽默句子哥谈不上是一匹野马,但也绝不是一般的毛驴。好怀念以前瘦的时候啊,那时候我只有六斤八两。别问我减肥瘦了没,你天天上班也不没有存款吗。室外7度,我怀里37度,你没得选。如果甜甜的恋爱轮不到我了,原味的也可以阿。你管我胖不胖,又不做你对象。像我这么漂亮的小姐姐,没点体重能压得住美貌吗。安慰别人的时候一套一套的,安慰自己只想拿绳子一套。爱美之心,人皆有之。你不爱我,你不是人。

  • 事实证明这5类人更容易考上公务员(根本别想考上公务员)

    公务员考试环节,只要你拿到这张证书,能胜任的岗位比较多。而且报考很多单位都有优势,尤其冷门专业,拿到证书在面试过程中跟面试官展示,取胜的机会大太多了。

  • 沈周的《山居图》,笔法精道简洁,能画到这个程度真的很妙

    明代沈周的作品很多人都喜欢,但也有一些人不太喜欢他那一种过于“简白”的风格,所谓的简白就是把传统古画的意境感通过自己留白的方式用自己的笔意给画出来。下面我们一起来欣赏一下沈周的《山居图》,一起来感受一下这一种传统笔法之下的中国画魅力。沈周的《山居图》,笔法精道简洁,能画到这个程度真的很妙!沈周的笔墨配合达到了一流的级别,笔简意苍茫,中锋侧笔兼施,笔法刚中有柔,苍中带秀。

  • 店铺起名大全 店铺起名大全免费取名大全集

    1、[青青花卉]、[腾达]2、[勿忘我]、[容嬷嬷]3、[赛达]、[巴黎花坊]4、[鸿俪坊]、[温馨花苑]5、[寄语]、[德顺]6、[见习爱神]、[咖啡]7、[彤阳]、[香舍丽榭]8、[捡便宜]、[尚层衣舍]9、[柏盛花卉]、[富荣花圃]10、[花花世界]、[她喜爱花草]11、[伟昂]、[爱尚儿]12、[陌上花]、[家和百货商城]

  • 如何打造一支超强凝聚力团队(31个经典团队培训游戏)

    这要依据实际情况而定。作为沟通的最佳方式要根据不同的场合及环境而定。另外万一指令有错,信任很难重建。

  • 原神铁块在哪(原神铁块在哪里多)

    原神的白铁块是玩家打造四星武器和良矿的重要的矿石资源,但是具体位置在哪呢?原神铁块在哪在原神游戏中,全图中一共有着141处铁块的刷新点。其中最密集的区域还是奥藏山。非常缺这类矿石的话,建议第一时间跑到奥藏山那里搜刮一波,必然有不小的收获。