java线程同步中volatile关键字的施用场景

java线程同步中volatile关键字的使用场景
关键字volatile可以说是java虚拟机提供的最轻量级的同步机制,由于它不太容易被正确地、完整地理解,很少被人用到。但是什么时候适合用volatile呢?一般来说:当一个变量的值的修改不依赖原来的值时,就满足了volatile关键字的使用场景。

例1
private int value = 0;

public void setValue(int value){
	this.value = value;
}

public int getValue(){
	return value;
}

当set方法和get方法在两个线程中执行时,由于set方法对value的修改不依赖value的原值,可以在value变量前加volatile关键字来实现线程同步,保证get方法取得的值是最新的。

例2 这也是用volatile保证线程同步的列子。
volatile boolean shutdown;

public void shutdown(){
	shutdown = true;
}

public void dowork(){
	while(!shutdown){
	     // do something
	}
}


例3 这是一个不能用volatile关键字的例子
public static int race = 0;

public static void increase(){
	race++;
}

public static int getRace(){
	return race;
}