采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
线程A、B、C依次等待 锁X,并且三个线程 都进入blocking状态。 有一个时间节点,X 被释放,running 状态的线程D能够直接获得 X,A、B、C 线程此时已经开始饥饿了。 问题:D 获取X 锁的整个过程,A、B、C 线程是主动放弃抢锁的动作,还是三个线程和D同时抢锁,但是抢不过D。
ABC不是和D同时抢锁,唤醒是按顺序的,A先,不是ABC同时唤醒。A在被唤醒之前D就抢到了。
明白了,跟notifiyAll搞混了。那么A被唤醒了,是白白唤醒它吗,还是下一轮竞争中,A和等待插队的元素有一样的竞争力。
一样的竞争力,不是白白唤醒
也就是插队的设计,只是把唤醒线程的空档期交给还未进入阻塞状态的线程。至于被唤醒的线程,赋予了队列头节点元素“反插队”的权利,但是可能再次阻塞。线程饥饿的原因是,头节点元素总是在资源空闲的情况下,从被唤醒又回到了阻塞状态。
登录后可查看更多问答,登录/注册
JUC全方位讲解,构建并发工具类知识体系
981 11
1.4k 10
1.0k 10
992 10
1.4k 9