最近在学多线程,遇到了一个不解的问题。
例子是测试多线程下共享变量可能导致的原子性操作的问题。
代码中,如果多了这一句,结果是正确的。非常不解,麻烦码神解惑!
//System.out.println("MyTest1.count:" + MyTest1.count+Thread.currentThread().getName());
package com.chj.thread.capt01.volatiles;
public class MyTest1 {
public static int count=0;
public static void main(String[] args) throws InterruptedException {
MyThread thread1= new MyThread();
MyThread thread2 = new MyThread();
thread1.start();
thread2.start();
Thread.sleep(2000);
System.out.println(count);
}
}
class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
//如果多了这一句,结果是正确的
//System.out.println("MyTest1.count:" + MyTest1.count+Thread.currentThread().getName());
MyTest1.count++;
System.out.println("MyTest1.count结果为:" + MyTest1.count+Thread.currentThread().getName());
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
同时,运行结果看,最后一次+1操作时,count的值为198,+1操作结果应该为199,但结果却为200?