关于单例模式的想法-volatile

Posted 迷路的0161

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于单例模式的想法-volatile相关的知识,希望对你有一定的参考价值。

今天看着一个多线程并发用到的关键字:volatile,看了不少资料发现这个是一个共享的直接写入内存使用的关键字修饰变量,用来修饰类变量或者类静态变量,所以有了一个关于单利模式的想法,我们都知道的单例模式的一个写法是:

class Singleton{
    private static Singleton instance = null;
 
    private Singleton() {
 
    }
 
    public static Singleton getInstance() {
        if(instance==null) {
            synchronized (Singleton.class) {
                if(instance==null)
                    instance = new Singleton();
            }
        }
        return instance;
    }
}

  当然单例模式还有其他的写法,我要说的是将关键字volatile加在变量instance上:

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;
    }
}

  因为用votalite修饰的变量,在修改时是直接将变量值写进物理内存中去的,不会写入缓存中去,这样,单例模式就更加的,,,,好了

以上是关于关于单例模式的想法-volatile的主要内容,如果未能解决你的问题,请参考以下文章

优雅设计封装基于Okhttp3的网络框架:多线程单例模式优化 及 volatile构建者模式使用解析

单例模式中volatile关键字的作用

java的单例模式,为什么需要volatile

DCL 单例模式是否需要volatile?

关于单例模式的线程安全问题讨论以及加锁时机之我的想法

Android 深入理解单例模式