并发编程 死锁
本文将介绍并发编程中的死锁问题。
一、什么是死锁?
死锁是指:一组线程,每一个线程都在等待只能由其它线程引发的事件,结果就是所有线程都阻塞了。
二、死锁条件
- 互斥:资源同一时刻只能被一个线程占有
- 占有等待:线程占有一部分资源,等待其它资源
- 无法中断:线程已经获得的资源除非主动释放,否则无法被其它线程强行剥夺
- 循环等待:若干线程之间形成一种循环等待资源的关系
三、死锁应对策略
- 一次性申请所有资源,而不是在执行过程中逐个申请
- 当线程等待资源超过一定时间时,主动释放已占有的资源,等待片刻后再重试
- 规定资源之间的顺序,申请资源时,应该按照顺序申请,释放资源时应该反序释放
- 检测死锁的发生,发现死锁后,主动结束死锁链条中的某个事务
参考
- Java 并发编程实战