hellowordhaha
2017-06-12 16:20
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的话不管满不满足都会往下执行,所以输出的时候线程还没有跑完,当然会错咯
细说Java多线程之内存可见性
55899 学习 · 89 问题
相似问题