请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于线程饥饿与线程状态的疑问

线程A、B、C依次等待 锁X,并且三个线程 都进入blocking状态。
有一个时间节点,X 被释放,running 状态的线程D能够直接获得 X,A、B、C 线程此时已经开始饥饿了。
问题:D 获取X 锁的整个过程,A、B、C 线程是主动放弃抢锁的动作,还是三个线程和D同时抢锁,但是抢不过D。

正在回答

1回答

ABC不是和D同时抢锁,唤醒是按顺序的,A先,不是ABC同时唤醒。A在被唤醒之前D就抢到了。

0 回复 有任何疑惑可以回复我~
  • 提问者 ych_1997 #1
    明白了,跟notifiyAll搞混了。那么A被唤醒了,是白白唤醒它吗,还是下一轮竞争中,A和等待插队的元素有一样的竞争力。
    回复 有任何疑惑可以回复我~ 2020-01-17 15:26:26
  • 悟空 回复 提问者 ych_1997 #2
    一样的竞争力,不是白白唤醒
    回复 有任何疑惑可以回复我~ 2020-01-17 15:32:07
  • 提问者 ych_1997 回复 悟空 #3
    也就是插队的设计,只是把唤醒线程的空档期交给还未进入阻塞状态的线程。至于被唤醒的线程,赋予了队列头节点元素“反插队”的权利,但是可能再次阻塞。线程饥饿的原因是,头节点元素总是在资源空闲的情况下,从被唤醒又回到了阻塞状态。
    回复 有任何疑惑可以回复我~ 2020-01-17 15:39:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信