3 回答

TA貢獻(xiàn)88條經(jīng)驗(yàn) 獲得超43個(gè)贊
四個(gè)線程,每個(gè)線程都會(huì)讀取并打印num然后把num-1?,F(xiàn)在想象這么一種情況,線程一讀取了num=96,還沒來(lái)得及打印和執(zhí)行--操作,線程二也讀取了num=96,這樣就會(huì)造成問題所提情況。由于你沒有加鎖所以線程對(duì)num變量的讀寫是無(wú)序,他們并不會(huì)一個(gè)一個(gè)的自發(fā)排隊(duì)去讀寫這個(gè)數(shù),而是隨意讀寫數(shù)據(jù),這就會(huì)造成數(shù)據(jù)之間的讀寫不同步。若解惑,望采納

TA貢獻(xiàn)885條經(jīng)驗(yàn) 獲得超1144個(gè)贊
1、你的代碼邏輯有問題,為什么呢?你的每個(gè)Ticket線程內(nèi)都有100張票,也就是樓上說的400張票,所以重復(fù)是肯定的。
2、如果讓這4個(gè)線程同時(shí)競(jìng)爭(zhēng)這100張票,先讓他們共享這個(gè)資源。
3、同步可以用 synchronized 關(guān)鍵字實(shí)現(xiàn)。

TA貢獻(xiàn)10條經(jīng)驗(yàn) 獲得超3個(gè)贊
肯定要做同步處理的,正在買票的時(shí)候其他線程就不能對(duì)num進(jìn)行操作。最大的一個(gè)問題就是你賣的是400張票!
添加回答
舉報(bào)