题目分析:学习中。。
【答案】
- 线程死锁引发的条件:
死锁的起因是多个线程之间相互等待对方而被永远暂停(处于非Runnable)。死锁的产生必须满足如下四个必要条件:
资源互斥:一个资源每次只能被一个线程使用
请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放
不剥夺条件:线程已经获得的资源,在未使用完之前,不能强行剥夺
循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系
- 如何避免死锁的发生?
粗锁法:使用一个粒度粗的锁来消除“请求与保持条件”,缺点是会明显降低程序的并发性能并且会导致资源的浪费。
锁排序法:(重点)指定获取锁的顺序,比如某个线程只有获得A锁和B锁,才能对某资源进行操作。
使用显式锁中的ReentrantLock.try(long,TimeUnit)来申请锁
【题目拓展】
- 暂无