目录
死锁
两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
死锁产生条件
- 资源互斥
- 不可剥夺
- 请求与等待
- 循环等待
避免死锁
- 锁排序
- 超时放弃
线程饥饿
一直有优先级更高的线程先获取到锁资源,导致其任务一 直无法进展的一种活性故障。
比如高并发的环境下使用非公平(Non-fair)的ReentrantLock就容易出现线程饥饿的情况
活锁
线程一直处于运行状态,但是其任务却一直无法进展的一种活性故障。
- 线程一直在申请其所需的资源而一直未申请成功, 那么此时线程饥饿实际上就演变成活锁;
- 多个相互协作的线程间,为了彼此间的响应而不断地主动放弃锁,使得没有一个线程能够继续前进