窗口2賣了一張票,剩余票數(shù)為:3
窗口3賣了一張票,剩余票數(shù)為:2
窗口3賣了一張票,剩余票數(shù)為:1
窗口3賣了一張票,剩余票數(shù)為:0
窗口1賣了一張票,剩余票數(shù)為:3
最后一個、個剩余票數(shù)明顯不對啊
窗口3賣了一張票,剩余票數(shù)為:2
窗口3賣了一張票,剩余票數(shù)為:1
窗口3賣了一張票,剩余票數(shù)為:0
窗口1賣了一張票,剩余票數(shù)為:3
最后一個、個剩余票數(shù)明顯不對啊
2015-03-02
@Wweison要保證線程的安全性,很明顯是需要加同步的,很多初學(xué)者也問到了這個問題,你可以在問答里面看下!我這里之所以沒加同步,是因為《深入淺出java多線程》中已經(jīng)對同步做了講解,所以我這里沒必要重復(fù)講解,課程的重點不在這里,同時這樣也可以留給大家一點思考的和改進(jìn)的余地!
2015-03-02
我用那個代碼,還出現(xiàn)這種結(jié)果,感覺應(yīng)該加鎖
窗口2賣了一張票,剩余票數(shù)為:3
窗口3賣了一張票,剩余票數(shù)為:2
窗口3賣了一張票,剩余票數(shù)為:1
窗口3賣了一張票,剩余票數(shù)為:0
窗口1賣了一張票,剩余票數(shù)為:3
窗口2賣了一張票,剩余票數(shù)為:3
窗口3賣了一張票,剩余票數(shù)為:2
窗口3賣了一張票,剩余票數(shù)為:1
窗口3賣了一張票,剩余票數(shù)為:0
窗口1賣了一張票,剩余票數(shù)為:3
2015-03-02
線程應(yīng)該不是執(zhí)行完ticketsCont--這句話就被其它線程搶去了,應(yīng)該是執(zhí)行完System.out.println里面的字符串的生成 才被搶去的
2015-02-26
講師回答 / MartonZhang
你好,ticketsCont是實例變量,它的值自然是存在堆中(每個java對象在堆中都會占據(jù)一定內(nèi)存,而實例變量的值就是存儲在這塊內(nèi)存中,類似于結(jié)構(gòu)體,因此每個對象對應(yīng)一個ticketsCont的值),ticketsCont跟值傳遞沒有關(guān)系啊,如果是Runnable方式的話,傳遞的也只是MyThread對象引用的副本,不管ticketsCont的事,但是因為ticketsCont的值在引用和引用副本所指向的堆內(nèi)存中,所以無論是引用還是引用副本改變了堆內(nèi)存中ticketsCont的值,都會產(chǎn)生效果!
2015-02-24