产生背景
当给变量加了volatile关键字, 表示该变量对所有线程可见, 但不保证原子性.
public class VolatileDemo extends Thread {
public volatile static int count = 0;
@Override
public void run() {
for(int i = 0; i < 10000; i++) {
count++;
}
System.out.println("count:"+count);
}
public static void main(String[] args) {
for(int i = 0; i < 10; i++) {
VolatileDemo volatileDemo = new VolatileDemo();
volatileDemo.start();
}
}
}
只需看最后一个值,没到10,000,无法保证想线程安全
使用atomic原子类
public class VolatileDemo extends Thread {
// public volatile static int count = 0;
// 保证数据原子性问题
public static AtomicInteger count = new AtomicInteger(0);
@Override
public void run() {
for(int i = 0; i < 10000; i++) {
// count++;
count.incrementAndGet();
}
// System.out.println("count:"+count);
System.out.println("count:"+count.get());
}
public static void main(String[] args) {
for(int i = 0; i < 10; i++) {
VolatileDemo volatileDemo = new VolatileDemo();
volatileDemo.start();
}
}
}