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

论坛 期权论坛 脚本     
匿名技术用户   2021-1-5 14:45   59   0

目录

死锁

死锁产生条件

避免死锁

线程饥饿

活锁


死锁

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

死锁产生条件

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

避免死锁

  • 锁排序
  • 超时放弃

线程饥饿

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

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

活锁

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

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP