输出是10,不是11。涉及到 i++ 的原子性问题,i++ 的操作实际上为
- 先是将i的值从内存中拿出来
- 将i的值加1
- 把i写回到内存中
涉及到读改写三个操作;
public class code {
public static void main(String[] args) {
AtomicDemo ad = new AtomicDemo();
for (int i = 0; i < 10; i++){
new Thread(ad).start();
}
}
}
class AtomicDemo implements Runnable{
private int serialNumber = 0;
@Override
public void run() {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + getSerialNumber());
}
public int getSerialNumber(){