原子变量中的值,使用 volatile 修饰,保证了内存可见性;
CAS(Compare-And-Swap) 算法保证数据的原子性;
1、i++的操作实际上分为三个步骤: “读-改-写”;
2、原子性: 就是”i++”的”读-改-写”是不可分割的三个步骤;
3、原子变量: JDK1.5 以后, java.util.concurrent.atomic包下,提供了常用的原子变量;
import java.util.concurrent.atomic.AtomicInteger;
public class testdemo3{
public static void main(String[] args){
AtomicDemo ad = new AtomicDemo();
for(int i=0; i < 10; i++){
new Thread(ad).start();
}
for(int i=0; i < 10; i++){
System.out.println(ad.getSerialNumber());
}
}
}
class AtomicDemo implements Runnable{
private AtomicInteger serialNumber = new AtomicInteger();
public void run(){
try{
Thread.sleep(2);
}catch(InterruptedException e){
}
System.out.println(Thread.currentThread().getName()+":"+getSerialNumber());
}
public int getSerialNumber(){
// 自增运算
return serialNumber.getAndIncrement();
}
}