票数不对,为什么呢?

来源:2-3 应用Runnable模拟卖票

微微shirly

2016-03-12 21:03

出现这种情况是怎么回事?

窗口1卖了一张票,剩余票数为:3

窗口3卖了一张票,剩余票数为:2

窗口2卖了一张票,剩余票数为:3

窗口3卖了一张票,剩余票数为:0


写回答 关注

2回答

  • 鸿泽
    2016-03-12 23:40:05
    已采纳

    可能是因为并非窗口1首先获得CPU时间片,而是其他线程。

    首先是窗口2 ,执行到count--之后,sysout时就被阻塞了。注意此时count=4。

    然后是窗口1 ,执行了整个run方法 ,此时count=3。

    然后是窗口3 ,执行了整个run方法 ,此时count=2。

    此时窗口2恢复,继count--之后执行,输出count=3。

    然后是窗口3 ,执行了整个run方法 ,此时count=0。

    当然这种并不一定是这样,因为现在的多核CPU线程是可以同时执行的。

    微微shir...

    嗯嗯,谢谢~ 后来多运行几次就好了

    2016-03-14 20:38:26

    共 1 条回复 >

  • 慕函数0603164
    2017-09-05 21:51:27

    正解,我的也出现这种

    窗口2卖了1张票,剩余票数为:3

    窗口1卖了1张票,剩余票数为:3

    窗口3卖了1张票,剩余票数为:2

    窗口1卖了1张票,剩余票数为:0

    窗口2卖了1张票,剩余票数为:1


细说多线程之Thread VS Runnable

认识Thread和Runnable的区别,以及使用jstack生成线程快照

55327 学习 · 68 问题

查看课程

相似问题