我想問下為什么最后那個1線程執(zhí)行到輸出System的時候,那個票數(shù)還是3,不應該已經(jīng)被修改過了嗎?
2016-05-24
main窗口賣了一張票,剩余票數(shù)為4
main窗口賣了一張票,剩余票數(shù)為3
main窗口賣了一張票,剩余票數(shù)為2
main窗口賣了一張票,剩余票數(shù)為1
main窗口賣了一張票,剩余票數(shù)為0
main窗口賣了一張票,剩余票數(shù)為3
main窗口賣了一張票,剩余票數(shù)為2
main窗口賣了一張票,剩余票數(shù)為1
main窗口賣了一張票,剩余票數(shù)為0
2016-05-14
最贊回答 / Angel若夢
你的代碼有兩處錯誤1.用繼承Thread的方法實現(xiàn)多線程,需要new多個對象,這也是你在共享變量是加static的原因,所以,你使用的鎖對象this是不同的對象,所以不能實現(xiàn)線程的互斥.可以使用該類的字節(jié)碼對象Ticket.class作為鎖對象.2.如果已經(jīng)實現(xiàn)了互斥,你需要在同步代碼塊中增加一個判斷條件,用來終止程序繼續(xù)執(zhí)行,否則會出現(xiàn)打印負數(shù)的情況.因為, ?未獲得鎖的線程會在循環(huán)內(nèi)等待,當一條線程將tickets--到0的時候,其他等待的線程獲得鎖以后會繼續(xù)執(zhí)行后續(xù)代碼,導致運行結(jié)果不準確.
2016-03-13
舉的例子不合適,容易誤導別人!繼承thread的子類中定義了票數(shù)變量,每new一下啟動新線程,都會有5張票,把票數(shù)變量定義成全局變量試試
2016-03-13