亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

加了同步代碼關鍵字,但是還是會出現線程安全問題,怎么回事???

public?class?VolatileT?{
	private?int?number?=?0;
	
	public?int?getNumber(){
		return?this.number;
	}
	
	public?void?increase(){
		synchronized(this){
		this.number++;
		}
	}
	
	public?static?void?main(String[]?arg){
		final?VolatileT?vo?=?new?VolatileT();
		for(int?i=0;i<500;i++){
			new?Thread(new?Runnable(){
				@Override
				public?void?run()?{
					vo.increase();
				}
			}).start();
			//System.out.println(vo.getNumber());
			System.out.println(Thread.activeCount());
		}
		if(Thread.activeCount()>1){
			Thread.yield();
		}
		System.out.println("result="+?vo.getNumber());
	}
}


正在回答

2 回答

number 沒有加Volatile 關鍵字

0 回復 有任何疑惑可以回復我~
#1

是淚還是累

你這回答還被采納,我的天。synchronized已經確保了可見性了
2022-08-10 回復 有任何疑惑可以回復我~

number加了Volatile 關鍵字他也會出錯的,因為沒有保證原子性,才出現這種問題

0 回復 有任何疑惑可以回復我~

樓上說錯了把

if(Thread.activeCount()>1){

????????????Thread.yield();

????????}

這個錯了吧 你寫if的話不管滿不滿足都會往下執行,所以輸出的時候線程還沒有跑完,當然會錯咯

8 回復 有任何疑惑可以回復我~
#1

qq_往煙_0

對,if改為while
2017-12-03 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

加了同步代碼關鍵字,但是還是會出現線程安全問題,怎么回事???

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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