【Java 基础 22】死锁、活锁、线程饥饿的区别

目录

 

死锁

死锁产生条件

避免死锁

线程饥饿

活锁


死锁

两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

死锁产生条件

  • 资源互斥
  • 不可剥夺
  • 请求与等待
  • 循环等待

避免死锁

  • 锁排序
  • 超时放弃

线程饥饿

一直有优先级更高的线程先获取到锁资源,导致其任务一 直无法进展的一种活性故障。

比如高并发的环境下使用非公平(Non-fair)的ReentrantLock就容易出现线程饥饿的情况

活锁

线程一直处于运行状态,但是其任务却一直无法进展的一种活性故障。

  • 线程一直在申请其所需的资源而一直未申请成功, 那么此时线程饥饿实际上就演变成活锁;
  • 多个相互协作的线程间,为了彼此间的响应而不断地主动放弃锁,使得没有一个线程能够继续前进

 

 

你可能感兴趣的:(Java)