2024-08-04
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/2592152902

回答

死锁

死锁是指两个或两个以上的线程相互等待对方释放已经持有的锁,从而导致所有涉及的线程都无法继续执行的情况。死锁的发生需要满足四个条件:

  1. 互斥:线程对资源的访问是互斥的,即一次只能一个线程访问资源。
  2. 占有并等待:线程已经占有至少一个资源,并且在等待其他线程占有的资源。
  3. 不可剥夺:资源不能被强制性地从一个线程中剥夺,只能由占有它的线程释放。
  4. 循环等待:存在一个线程集 {T1, T2, ..., Tn},其中 T1 等待 T2 占有的资源,T2 等待 T3 占有的资源,直到 Tn 等待 T1 占有的资源,形成一个循环等待链。

活锁

活锁是指两个或两个以上的线程不断地相互让出资源,但是都无法继续执行具体的工作。

活锁与死锁不同的地方就在于:线程没有被阻塞,但因为每次尝试都被其他线程影响而无法向前推进。

锁饥饿

锁饥饿是指线程长期无法获得所需的资源,导致它无法正常执行业务。