第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這段java多線程代碼有問題嗎?

這段java多線程代碼有問題嗎?

開滿天機 2019-04-08 11:18:49
publicclassMain{publicstaticvoidmain(String[]args){MyThreadmt=newMyThread();newThread(mt).start();newThread(mt).start();newThread(mt).start();}}classMyThreadimplementsRunnable{privateintticket=20;publicvoidrun(){for(inti=0;i0){System.out.println("線程:"+Thread.currentThread().getName()+"賣票:ticket"+this.ticket--);}}}}
查看完整描述

2 回答

?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗 獲得超6個贊

不知道你想要干什么。不過要是買票,可能下面才是對的。
publicsynchronizedvoidrun()....
                            
查看完整回答
反對 回復(fù) 2019-04-08
?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗 獲得超1個贊

你這個涉及到一個共享變量的問題,ticket變量被三個線程同時訪問,就可能導(dǎo)致多個線程讀到同樣的值,這顯然是錯誤的。而且這只是其中一種情況。更復(fù)雜的是--操作并不是原子的,這就會產(chǎn)生另一種情況,如果ticket不是int,而是long,遞增/遞減是分步進(jìn)行的,這中間可能另一個線程同時向ticket寫值,從而產(chǎn)生更離奇的輸出。
所以就要對共享變量進(jìn)行同步控制,synchronized可以用在方法上,也可以以同步塊的方式進(jìn)行。更簡單的上使用java.util.concurrent.atomic.AtomicInteger,它提供原子的遞增/遞減方法。
而且,在輸出的地方也會出問題。因為字符串的拼接也不是原子的,所以肯出現(xiàn)輸出混亂的情況。
                            
查看完整回答
反對 回復(fù) 2019-04-08
  • 2 回答
  • 0 關(guān)注
  • 353 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號