回答
死锁
死锁是指两个或两个以上的线程相互等待对方释放已经持有的锁,从而导致所有涉及的线程都无法继续执行的情况。死锁的发生需要满足四个条件:
- 互斥:线程对资源的访问是互斥的,即一次只能一个线程访问资源。
- 占有并等待:线程已经占有至少一个资源,并且在等待其他线程占有的资源。
- 不可剥夺:资源不能被强制性地从一个线程中剥夺,只能由占有它的线程释放。
- 循环等待:存在一个线程集 {T1, T2, ..., Tn},其中 T1 等待 T2 占有的资源,T2 等待 T3 占有的资源,直到 Tn 等待 T1 占有的资源,形成一个循环等待链。
活锁
活锁是指两个或两个以上的线程不断地相互让出资源,但是都无法继续执行具体的工作。
活锁与死锁不同的地方就在于:线程没有被阻塞,但因为每次尝试都被其他线程影响而无法向前推进。
锁饥饿
锁饥饿是指线程长期无法获得所需的资源,导致它无法正常执行业务。