扫码关注微信公众号

回复“面试手册”,获取本站PDF版

回复“简历”,获取高质量简历模板

回复“加群”,加入程序员交流群

回复“电子书”,获取程序员类电子书

当前位置: Java > Java并发高频面试题 > 6.线程死锁是如何产生的,如何避免

这块内容很重要,面试时也可能让手写死锁的代码示例。

死锁:由于两个或两个以上的线程相互竞争对方的资源,而同时不释放自己的资源,导致所有线程同时被阻塞。

死锁产生的条件:

  • 互斥条件:一个资源在同一时刻只由一个线程占用。
  • 请求与保持条件:一个线程在请求被占资源时发生阻塞,并对已获得的资源保持不放。
  • 循环等待条件:发生死锁时,所有的线程会形成一个死循环,一直阻塞。
  • 不剥夺条件:线程已获得的资源在未使用完不能被其他线程剥夺,只能由自己使用完释放资源。

避免死锁的方法主要是破坏死锁产生的条件。

  • 破坏互斥条件:这个条件无法进行破坏,锁的作用就是使他们互斥。
  • 破坏请求与保持条件:一次性申请所有的资源。
  • 破坏循环等待条件:按顺序来申请资源。
  • 破坏不剥夺条件:线程在申请不到所需资源时,主动放弃所持有的资源。

点击面试手册,获取本站面试手册PDF完整版