Java常见问题(十八):线程死锁引发的条件及如何避免?

题目分析:学习中。。

【答案】

  1. 线程死锁引发的条件:

死锁的起因是多个线程之间相互等待对方而被永远暂停(处于非Runnable)。死锁的产生必须满足如下四个必要条件

资源互斥:一个资源每次只能被一个线程使用
请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放
不剥夺条件:线程已经获得的资源,在未使用完之前,不能强行剥夺
循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系

  1. 如何避免死锁的发生?

粗锁法:使用一个粒度粗的锁来消除“请求与保持条件”,缺点是会明显降低程序的并发性能并且会导致资源的浪费。

锁排序法(重点)指定获取锁的顺序,比如某个线程只有获得A锁和B锁,才能对某资源进行操作

使用显式锁中的ReentrantLock.try(long,TimeUnit)来申请锁

【题目拓展】

  • 暂无
发布了82 篇原创文章 · 获赞 0 · 访问量 894

猜你喜欢

转载自blog.csdn.net/weixin_43518038/article/details/105079293