黑马程序员技术交流社区

标题: 多线程卖票问题 [打印本页]

作者: 焚雨成灰    时间: 2014-3-20 09:36
标题: 多线程卖票问题
本帖最后由 焚雨成灰 于 2014-3-20 10:18 编辑

            1.在17行,我用的是while(ticket>0),而毕老师是while(true) if(ticket>0) 这两个有什么区别?
            2.在18行加了同步代码块,为什么打印出来的票数不是100往下步进1递减的



作者: osully    时间: 2014-3-20 09:54
首先你传入了多个匿名对象,没有在操作同一个资源
同步代码块里面判断 if(ticket>0) ,应该是避免出现负数吧
你那种里面也可以加入一个判断啊 while只是为了循环
作者: sgs_gzy    时间: 2014-3-20 10:06
while(true)意思是当满足真时,就进循环,进了循环后,用if(ticket>0)是用来保证100张票逐渐递减,只有大于0时才卖出票去。
第13行中,你定义了一个静态的static int ticket = 100,静态存放于方法区中,而打印中的ticket存放于栈内存中,随着对象的调用才进入堆内存中。
故打印打印出来的票数不是100往下步进1递减的

作者: 焚雨成灰    时间: 2014-3-20 10:20
osully 发表于 2014-3-20 09:54
首先你传入了多个匿名对象,没有在操作同一个资源
同步代码块里面判断 if(ticket>0) ,应该是避免出现负数吧
...

嗯,是资源不是同一个造成的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2