结论:
java中将变量声明为volatitle后只能确保每个时刻获取到该变量的值是那个时刻的最新值。
以下代码与volatitle的效果相同:
public class VolatitleEqualCode {
long volatitleVar = 0L;
// 写,调用同步保存变量值至volatitleVar
public synchronized void set(long volatitleVar) {
this.volatitleVar = volatitleVar;
}
// 读,调用同步保证此刻获取到的值是该变量的最新值
public synchronized long get() {
return this.volatitleVar;
}
// 修改volatitle变量值
public long getAndIncrement() {
long temp = get(); //获取最新值
temp += 1;
set(temp);
return this.volatitleVar;
}
}
在多线程下volatitle只能保证获取到变量的最新值,无法保证变量是线程安全(volatitle与线程安全无关)!!!