美文网首页
懒汉单例模式多线程问题

懒汉单例模式多线程问题

作者: dwwl | 来源:发表于2020-05-21 18:01 被阅读0次

单例模式:
懒汉式在多线程下的可能被多次赋值的情况:

LazySingleton.java

public class LazySingleton {
    private static LazySingleton lazySingleton ;

    private LazySingleton() {

    }

    public static LazySingleton getInstance() {
        if (lazySingleton == null) {
            lazySingleton = new LazySingleton();
        }
        return lazySingleton;
    }
}

出现原因:可能会有多个线程同时通过 lazySingleton == null 判断条件,这样会同时对lazySingleton赋了两次值,在某些情况下可能会不被允许。解决方法:加同步锁,但是这样开销会比较大,于是有了双重检查的这种方式,但是注意添加volatile防止指令重排序,

为什么双重检查锁模式需要 volatile ?

不得不提的volatile及指令重排序(happen-before)

文中介绍了除了双重检查模式 还可使用局部变量的方式

双重检查方式

public class LazySingleton {
    private static volatile LazySingleton lazySingleton ;

    private LazySingleton() {

    }

    public static LazySingleton getInstance() {
        if (lazySingleton == null) {
            synchronized (LazySingleton.class) {
                if (lazySingleton == null) {
                    lazySingleton = new LazySingleton();
                }
            }
        }
        return lazySingleton;
    }
}

相关文章

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • Singleton 单例模式

    饿汉式单例模式 饿汉式单例模式 通过静态代码块增加异常处理 懒汉式单例模式 存在线程安全问题 懒汉式单例模式 解决...

  • 单例模式有几种写法?

    懒汉模式 懒汉是变种最多的单例模式。我们从懒汉出发,通过其变种逐渐了解实现单例模式时需要关注的问题。 基础的懒汉 ...

  • 12、彻底玩转单例模式

    饿汉式单例: 懒汉式单例: 问题: 懒汉式在多线程下: 结果:(可能会出现多次创建对象——即和单例相违背) 双重检...

  • java的单例模式

    饿汉单例模式 懒汉单例模式

  • Java16-3 单例设计模式下的多线程访问

    当一个单例设计模式被多线程并发访问时,也会出现安全问题。 懒汉式单例设计模式(推荐使用) 不会因为同步而出现安全问...

  • 《每天进步一点点》DAY7: 常用设计模式

    单例模式 (1)饿汉式 开发用这种方式。 (2)懒汉式 (多线程的问题) (3)静态内部类方式实现 简单工厂模式 ...

  • 有关单例模式懒汉式的安全问题

    有关单例模式懒汉式安全的问题(全) 单例模式有两种一种是懒汉式,一种...

  • 懒汉单例模式多线程问题

    单例模式:懒汉式在多线程下的可能被多次赋值的情况: LazySingleton.java 出现原因:可能会有多个线...

  • kotlin实现单例模式

    1.懒汉式实现单例模式 2.线程安全懒汉式实现单例模式 3.双重校验懒汉式实现单例模式 4.静态内部类方式实现单例模式

网友评论

      本文标题:懒汉单例模式多线程问题

      本文链接:https://www.haomeiwen.com/subject/jwytahtx.html