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());
}
}
2017-06-14
number 沒有加Volatile 關鍵字
2019-07-23
number加了Volatile 關鍵字他也會出錯的,因為沒有保證原子性,才出現這種問題
2017-11-08
樓上說錯了把
if(Thread.activeCount()>1){
????????????Thread.yield();
????????}
這個錯了吧 你寫if的話不管滿不滿足都會往下執行,所以輸出的時候線程還沒有跑完,當然會錯咯