窗口2卖了一张票,剩余票数为:3
窗口3卖了一张票,剩余票数为:2
窗口3卖了一张票,剩余票数为:1
窗口3卖了一张票,剩余票数为:0
窗口1卖了一张票,剩余票数为:3
最后一个、个剩余票数明显不对啊
窗口3卖了一张票,剩余票数为:2
窗口3卖了一张票,剩余票数为:1
窗口3卖了一张票,剩余票数为:0
窗口1卖了一张票,剩余票数为:3
最后一个、个剩余票数明显不对啊
2015-03-02
@Wweison要保证线程的安全性,很明显是需要加同步的,很多初学者也问到了这个问题,你可以在问答里面看下!我这里之所以没加同步,是因为《深入浅出java多线程》中已经对同步做了讲解,所以我这里没必要重复讲解,课程的重点不在这里,同时这样也可以留给大家一点思考的和改进的余地!
2015-03-02
我用那个代码,还出现这种结果,感觉应该加锁
窗口2卖了一张票,剩余票数为:3
窗口3卖了一张票,剩余票数为:2
窗口3卖了一张票,剩余票数为:1
窗口3卖了一张票,剩余票数为:0
窗口1卖了一张票,剩余票数为:3
窗口2卖了一张票,剩余票数为:3
窗口3卖了一张票,剩余票数为:2
窗口3卖了一张票,剩余票数为:1
窗口3卖了一张票,剩余票数为:0
窗口1卖了一张票,剩余票数为:3
2015-03-02
讲师回答 / MartonZhang
你好,ticketsCont是实例变量,它的值自然是存在堆中(每个java对象在堆中都会占据一定内存,而实例变量的值就是存储在这块内存中,类似于结构体,因此每个对象对应一个ticketsCont的值),ticketsCont跟值传递没有关系啊,如果是Runnable方式的话,传递的也只是MyThread对象引用的副本,不管ticketsCont的事,但是因为ticketsCont的值在引用和引用副本所指向的堆内存中,所以无论是引用还是引用副本改变了堆内存中ticketsCont的值,都会产生效果!
2015-02-24