为了账号安全,请及时绑定邮箱和手机立即绑定

我觉得这里讲的有问题

我觉得这里线程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 已经缓存了,如何保证单例?


正在回答

举报

0/150
提交
取消

我觉得这里讲的有问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信