volatile的非原子性

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主要使用的場合是在多個線程中可以感知實例變量被更改了,並且可以獲得最新的值使用,也就是多線程讀取共享變量時可以獲取最新值使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章