public class VoTest {
private int num=1;
private void increase(){
** synchronized (this){
this.num++;
}**
}
private int read(){
return this.num;
}
public static void main(String[] args) {
final VoTest test=new VoTest();
for (int i = 0; i < 500; i++) {
new Thread(new Runnable() {
@Override
public void run() {
test.increase();
}
}).start();
}
//如果还有子线程在运行,主线程就主动让出cpu资源
//直到所有的子线程都运行结束
if(Thread.activeCount()>1){
Thread.yield();
}
System.out.println("num="+test.read());
}
}
按理说,synchronized关键字可以保证原子性和可见性,但是
这段代码的结果本应该是500,结果却千奇百怪,不管num加不加volatile关键字
都一样。
结果随便截了几个,求大神解答!