Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案(二)

②. 虚假唤醒问题分析


  • ①. 初始状态


Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案(二)

②. 厨师A得到操作权,发现面的数量为0,可以做面,面的份数+1,然后唤醒所有线程;


Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案(二)


③. 厨师B得到操作权,发现面的数量为1,不可以做面,执行wait操作;


Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案(二)


④. 厨师A得到操作权,发现面的数量为1,不可以做面,执行wait操作;


Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案(二)


⑤. 食客甲得到操作权,发现面的数量为1,可以吃面,吃完面后面的数量-1,并唤醒所有线程;


Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案(二)


⑥. 此时厨师A得到操作权了,因为是从刚才阻塞的地方继续运行,就不用再判断面的数量是否为0了,所以直接面的数量+1,并唤醒其他线程


Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案(二)


⑦. 此时厨师B得到操作权了,因为是从刚才阻塞的地方继续运行,就不用再判断面的数量是否为0了,所以直接面的数量+1,并唤醒其他线程


Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案(二)


⑧. 这便是虚假唤醒,还有其他的情况,读者可以尝试画画图分析分析


上一篇:Fiori应用出现乱码问题的一个原因


下一篇:HDOJ 1061 Rightmost Digit(循环问题)