问答详情
源自:2-3 应用Runnable模拟卖票

票数不对,为什么呢?

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

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

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

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

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


提问者:微微shirly 2016-03-12 21:03

个回答

  • 鸿泽
    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线程是可以同时执行的。

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

    正解,我的也出现这种

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

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

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

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

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