package com.freeflying.thread.volatil;
/**
* volatile的非原子性
* @ClassName: VolatileNotAtomic
* @Description:
* @author freeflying
* @date 2018年7月14日
*/
public class VolatileNotAtomic {
public static void main(String[] args) {
VolatileNotAtomicEx[] volatileNotAtomicExs=new VolatileNotAtomicEx[100];
for(int i=0;i<100;i++) {
volatileNotAtomicExs[i]=new VolatileNotAtomicEx();
}
for(int i=0;i<100;i++) {
volatileNotAtomicExs[i].start();
}
}
}
class VolatileNotAtomicEx extends Thread{
volatile public static int count;
private static void addCount() {
for(int i=0;i<100;i++) {
count++;
}
System.out.println("count="+count);
}
@Override
public void run() {
addCount();
}
}
结果:
......
count=5074
count=4974
count=4874
count=4774
count=3574
结论:volatile主要使用的场合是在多个线程中可以感知实例变量被更改了,并且可以获得最新的值使用,也就是多线程读取共享变量时可以获取最新值使用