public class SingletonClass {
private /*volatile*/ static SingletonClass instance = null;
public static SingletonClass getInstance() {
if (instance == null) {
synchronized (SingletonClass.class) {
if(instance == null) {
instance = new SingletonClass();
}
}
}
return instance;
}
private SingletonClass() {
}
1.volatile关键字保证了,当线程修改了volatile所修饰的变量时 能及时的实现方法区的成员变量和该变量在栈中的拷贝的一致性,保证了变量的线程安全性。
2. "Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝(保存在栈中),而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。"
这句话的翻译就是 成员变量如果在synchronized代码块内,那么这个成员变量就不要在用volatile修饰了。