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

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

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

面试官什么是死锁目录什么是死锁?死锁产生原因?如何使用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

    推荐阅读
  • 减肥常识大全集(中名网健康减肥的常识与误区)

    ,我来为大家科普一下关于减肥常识大全集?以下内容希望对你有帮助!减肥常识大全集健康减肥的常识与误区教你学会瘦身最快秘籍减肥误区一辣椒是可以帮助人体加快新陈代谢,燃烧脂肪,但是对肠胃伤害及其的大,要应人而异,如果火气本来比较大的,建议不要食用辣椒,那只会让你脾气更差。

  • 肠道有寄生虫会出现急性腹泻吗(连续腹痛腹泻2个月)

    没有充分的加热后食用,无法杀死这些寄生虫,最终可能诱发肠道疾病、肝脏疾病等。血常规检查单中各项指标均正常,唯独嗜酸细胞指标升高,并且达到了48.2。这项指标和寄生虫、免疫反应、过敏反应有关。目前已经发现,当人体感染寄生虫后,可能出现5种损伤。为了避免人体受到寄生虫的威胁,人们也该擦亮眼睛,尽量避免食用可能暗藏寄生虫的食物。

  • 无硅油的洗发水哪个好用(无硅油洗发水怎么选择)

    洗发、梳头、都会使得毛鳞片张开,翘起,特别是烫染,高温干燥环境损伤极其大。但另一方面会有硅油累积的风险,造成头发油腻,堵塞毛孔。“无硅油”洗发水,很多其实是取用替代品,用于取代硅油,起到调理效果。水之密语也是资生堂旗下产品,品牌是水之密语。配方表无硅油海藻和发酵薄荷配方,植物配方,温和洁净不伤头皮和发质。功效方面算是非常均衡的。

  • 介意是什么意思(介意的意思)

    以下内容希望对你有帮助!介意是什么意思介意是一个汉语词语,拼音为jièyì,意思是在意,把令人不高兴的事放在心上。《后汉书·度尚传》:“所亡少少,何足介意!”

  • 葡萄牙历史上为什么能大国崛起(葡萄牙这个欧洲小国)

    亨利去世后,其子阿方索一世在1139年宣布独立,建立了葡萄牙王国,并在1143年获得卡斯提尔王国的承认。13世纪后期,迪尼斯一世在葡萄牙全面推行葡萄牙语,葡萄牙已经成为了欧洲第一个民族国家。葡萄牙的罗卡角是欧洲大陆的终点,被誉为“欧洲的天涯海角”。1415年,葡萄牙在亨利王子的带领下袭击了阿拉伯人在北非的据点——休达。因而,航海技术成为阻碍葡萄牙的一道障碍。1444年,葡萄牙终于到达了非洲中部的“绿色国家”。

  • 南航选座提示航班变动(南航国内航班推行100)

    南航方面表示,成功购票后,旅客可通过南航官方电子渠道进行座位预选。对航班起飞前4小时未主动选座的旅客,南航将自动为旅客预选座位,并办理网上值机手续。在支持电子登机牌的机场,旅客可以在航班起飞前通过上述南航官方电子渠道获取电子登机牌,并凭电子登机牌直接通过安检、登机,无须再排队打印纸质登机牌。目前南航在广州、北京等39个国内机场支持电子登机牌。原则上机场人工柜台不受理座位调整需求,仅提供行李托运服务。

  • 老头环仿身泪滴的骨灰如何获得

    艾尔登法环仿身泪滴的骨灰如何获得?下面小编就带来艾尔登法环仿身泪滴的骨灰获取方法介绍,一起来看看吧。艾尔登法环仿身泪滴的骨灰获取方法介绍用血量召唤,模仿出一个完全一样的自己,甚至可以使用你物品快捷栏里的东西,又肉又有输出,强横无匹,适合想要强力骨灰有没有蓝量的弱智战士。位置如下,需要用到石剑钥匙。

  • 最有音乐天赋的三个星座(具备音乐敏感度)

    如果是风象星座在这几个宫位的话,被这些才华熏陶的概率会更高。一些上升在风象星座,天顶在风象星座的,也会有很高的音乐敏感度,还有一部分是,上升星座或天顶星座本身与太阳星座、月亮星座,又或者说与群星风象的能量有接触,表现出这些才能的概率也会更高一些。当然,这个上升、天顶的能量,如果能是水瓶座这类的固定星座的能量,对于其本身特长的稳定度也会高一些,能把擅长的稳定发挥。

  • 富有诗意女孩网名(清新诗意的女孩网名)

    清新诗意的女孩网名1、爱你我有病*2、知道吗,我喜欢你3、~仰起頭·讓眼淚:倒流4、╰つ我把我唱给你听.5、你你的情绪,打湿尘埃!6、只影向谁去7、脉搏ぃ8、抛弃我的心房依会受伤9、要是能死就好了/10、、假如你返来1。

  • 服装整理销售数据(服装商户臧伟徐利平)

    头脑灵活加上吃苦耐劳,臧伟在生意最红火时年销售额一度达到千万元。响应国家政策的号召,臧伟开始谋划把店转移到外地。2018年,臧伟举家搬至沧州,并花费30万元购买了占地50平方米的店铺,产权20年。据统计,沧州明珠国际商贸城共承接北京商户1万多户,这意味着上万个家庭的迁徙。2020年,受疫情影响,徐利平开始琢磨将销售模式从单纯的线下批发发展成线上线下相结合。