Java并发编程(6)——嵌套管程锁死

前言

其实到上一篇我对前面的东西就开始有点迷了,但是拖着也没有卵用,所以进度还是要继续赶的,所以就继续往下看。内容上来说,上一篇描述了什么是饥饿:所有CPU时间片段被其他线程所占据,导致其中某一个线程得不到CPU资源的状态。引发饥饿的原因大致是三点:高优先级线程吞噬低优先级线程的CPU时间;线程永久阻塞在等待进入同步块;线程在等待一个永久处于等待状态的对象。解决方案是:使用锁代替同步块,使用公平锁。

嵌套管程锁死

这是一个类似于死锁的概念:

线程1获得对象A的锁,
线程1获得对象B的锁,同时持有对象A的锁
线程1决定等待另一个线程的信号再继续。
.
线程2需要同时获得对象A、B的锁才能够向线程1发送信号,
线程2无法获得对象A的锁,因为对象A的锁正在被线程1持有,
线程2一直处于等待阻塞的状态。
此时线程1因为一直在等待线程2的信号,因此也处于等待阻塞的状态。
.
于是一个死循环形成了:
线程1需要等待线程2的信号,因此不会释放对象A的锁,线程2需要获取对象A的才能给线程1发送信号

这个场景十分抽象,还是用代码来描述一下好了,我们先看一个锁的实例:

//TODO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值