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

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

Java并發(fā)計數器多1

Java并發(fā)計數器多1

陪伴而非守候 2019-05-25 17:08:47
在學習并發(fā)。嘗試做一個計數器。然后不知道為什么有時候計數會多1.有時候又不會。請問要怎樣才能完成正確的計數。publicclassIncrementTest{staticclassCounter{privateAtomicIntegercount=newAtomicInteger();publicvoidincrement(){count.incrementAndGet();}publicintgetCount(){returncount.get();}}staticCounterc=newCounter();staticclassTestimplementsRunnable{publicvoidrun(){while(c.getCount()
查看完整描述

2 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

你同步跟原子性搞混了吧,staticclassTestimplementsRunnable{
publicvoidrun(){
while(c.getCount()<100){
c.increment();-----》①
}
System.out.println(Thread.currentThread().getName()+":"+c.getCount());
}
}這段代碼出的問題,可能存在:當count為99時,A線程執(zhí)行到①時(還沒進行自增),線程調度器切換到B線程,這是B讀取的count還是99,然后進行自增。說錯了的話請指教
                            
查看完整回答
反對 回復 2019-05-25
?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

建議使用AtomicInteger的incrementAndGet方法因為,如果兩個線程同時執(zhí)行到while(c.getCount()<100)的時候,就會出現最后兩個線程都執(zhí)行了+1的操作。使用incrementAndGet可以保證increse和get兩個操作的線程安全
                            
查看完整回答
反對 回復 2019-05-25
  • 2 回答
  • 0 關注
  • 504 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號