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主要使用的場合是在多個線程中可以感知實例變量被更改了,並且可以獲得最新的值使用,也就是多線程讀取共享變量時可以獲取最新值使用