Java中死锁定义及发生的条件是什么

Java面试 潘老师 9个月前 (09-05) 176 ℃ (0) 扫码查看

Java面试题:Java中死锁定义及发生的条件是什么

得分点:

争夺共享资源、相互等待、互斥条件、请求和保持条件、不剥夺条件、环路等待条件

标准回答:

死锁是指两个或两个以上的进程在执行过程中,由于争夺共享资源而陷入互相等待的状态,导致它们都无法继续执行下去。在这种情况下,系统处于死锁状态,这些永远在互相等待的进程被称为死锁进程。

产生死锁的必要条件:虽然进程在运行中可能发生死锁,但死锁的发生必须满足以下四个必要条件:

  • 互斥条件:进程对所分配到的资源进行排他性使用,即一段时间内某资源只能由一个进程占用。如果此时有其他进程请求资源,请求者只能等待,直到占有资源的进程用毕并释放资源。
  • 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而新请求的资源已被其他进程占用。此时,请求进程阻塞,但保持对自己已获得的其他资源不放弃。
  • 不剥夺条件:已获得的资源在未使用完之前不能被剥夺,只能由自己在使用完后释放。
  • 环路等待条件:在发生死锁时,必然存在一个进程-资源的环形链,即进程集合 {P0, P1, P2, … , Pn} 中的 P0 正在等待一个 P1 占用的资源;P1 正在等待 P2 占用的资源,以此类推,Pn 正在等待已被 P0 占用的资源。

这些条件的同时满足是产生死锁的必要条件,只要有一个条件不满足,死锁就不会发生。因此,预防死锁的关键是打破这些必要条件中的任何一个。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/javainterview/8735.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】