java线程同步中volatile关键字的施用场景
java线程同步中volatile关键字的使用场景
关键字volatile可以说是java虚拟机提供的最轻量级的同步机制,由于它不太容易被正确地、完整地理解,很少被人用到。但是什么时候适合用volatile呢?一般来说:当一个变量的值的修改不依赖原来的值时,就满足了volatile关键字的使用场景。
例1
当set方法和get方法在两个线程中执行时,由于set方法对value的修改不依赖value的原值,可以在value变量前加volatile关键字来实现线程同步,保证get方法取得的值是最新的。
例2 这也是用volatile保证线程同步的列子。
例3 这是一个不能用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; }