我觉得这里讲的有问题

来源:4-3 volatile不能保证原子性(中)

sheting

2022-04-25 12:04

我觉得这里线程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回答

还没有人回答问题,可以看看其他问题

细说Java多线程之内存可见性

用两种方式实现内存可见性,代领大家深层次学习Java中的内存

55908 学习 · 74 问题

查看课程

相似问题