volatile变量不具备原子特性。单独使用不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式的类。
正确使用volatile的例子:
1、状态标记
volatile boolean shutdownRequested;
public void shutdown( ){ shutdownRequested = true; }
public void dowork( ){
while(!shutdownRequested){
//dosomethings
}
}
2、开销较低的读-写锁策略
public class CheesyCounter{
@GuardedBy("this")
private volatile int value;
public int getValue(){
return value;
}
public synchronized int increase(){
value ++;
}
}
参考文章:https://www.ibm.com/developerworks/cn/java/j-jtp06197.html