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()); } }
number 没有加Volatile 关键字
number加了Volatile 关键字他也会出错的,因为没有保证原子性,才出现这种问题
楼上说错了把
if(Thread.activeCount()>1){
Thread.yield();
}
这个错了吧 你写if的话不管满不满足都会往下执行,所以输出的时候线程还没有跑完,当然会错咯