我觉得这里讲的有问题
我觉得这里线程B已经把修改的值写入主内存了,那么线程A执行number+1 时,number会从主内存中读取到6,执行结果是正确的。
错误的情况应该是:
1. 线程A读取number的值,并且+1
2. 线程B读取number的值,并且+1
3. 线程B写入结果6到主内存
4. 关键点,此时线程A写入计算结果6, 给volatile修饰的变量赋值,只是会把值刷新到主内存。因此只加了一次。
不知道我的理解对不对?请大神指教
class Singleton{
private volatile static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if(instance==null) {
synchronized (Singleton.class) {
if(instance==null)
instance = new Singleton();
}
}
return instance;
}
}
按老师的讲解的例子 instance 已经缓存了,如何保证单例?