美文网首页
Java单例模式写法(懒加载+线程安全)

Java单例模式写法(懒加载+线程安全)

作者: 灰气球 | 来源:发表于2020-12-08 21:52 被阅读0次

双检锁

public class DoubleCheckLockingSingletonDemo {

    private DoubleCheckLockingSingletonDemo() {
    }

    private static volatile DoubleCheckLockingSingletonDemo instance;

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

}

枚举

public enum EnumSingletonDemo {

    INSTANCE;

    EnumSingletonDemo() {
    }

    public void whateverMethod() {
    }
}

静态内部类

public class InternalStaticClassSingletonDemo {

    private InternalStaticClassSingletonDemo() {
    }

    static class InternalStaticClass {
        public static volatile InternalStaticClassSingletonDemo instance = new InternalStaticClassSingletonDemo();
    }

    public static InternalStaticClassSingletonDemo getInstance() {
        return InternalStaticClass.instance;
    }

}

同步方法

public class SynchronizedFuncSingletonDemo {

    private SynchronizedFuncSingletonDemo() {
    }

    private static SynchronizedFuncSingletonDemo instance;

    public synchronized SynchronizedFuncSingletonDemo getInstance1() {
        if (null == instance) {
            instance = new SynchronizedFuncSingletonDemo();
        }
        return instance;
    }

}

问题

  • 为什么需要 volatile ?
    • volatile可以禁止指令重排序
  • 为什么需要禁止指令重排序?
    • 因为new并不是一个原子操作, new可以简单分成三个操作:
      • 分配一块内存
      • 将内存的地址赋值给变脸
      • 在内存上初始化对象
    • 所以不加volatile可能会抛出空指针

相关文章

  • Java单例模式写法(懒加载+线程安全)

    双检锁 枚举 静态内部类 同步方法 问题 为什么需要 volatile ?volatile可以禁止指令重排序 为什...

  • Java 单例模式

    概述 Java中单例模式是一种常见的设计模式,单例模式总共有7种写法。 懒汉,线程不安全 懒汉,线程安全 饿汉 饿...

  • 一个简单安全又好用的单例写法,你学废了吗?

    项目里使用枚举写单例: 1、简洁 写法简单 2、懒加载 3、线程安全 4、防止反序列化破坏单例 5、防止反射破坏单...

  • Kotlin 单例

    1.懒汉模式 java kotlin 2.懒加载(非线程安全) java kotlin 3.懒加载(线程安全) j...

  • 2020-07-02 - C#单例

    C#单例模式 使用懒加载模式创建, 写法比较优雅.

  • kotlin实现单例

    java实现单例模式 一直习惯于java的写法,java实现单例主要的思想是构造函数私有,然后考虑线程安全,在实现...

  • 单例模式与多线程

    这里直接给出几种懒汉模式的单例多线程安全的写法。这种写法就是普通的单例模式,但是是非线程安全的,至于原因,根据前面...

  • Java中单例模式的几种实现

    饿汉式单例 优点是线程安全,缺点时没有办法实现懒加载。 懒汉式+同步方法单例 优点是线程安全,懒加载缺点是效率不高...

  • 单例模式

    转载单例模式的七种写法代码地址GitHub java单例的七种写法## 第一种(懒汉,线程不安全): 这种写法la...

  • 单例设计模式笔记

    记录几种单例模式写法。 饿汉模式(线程不安全) 懒汉模式(线程不安全) 懒汉锁模式(线程安全) 懒汉双重判断模式(...

网友评论

      本文标题:Java单例模式写法(懒加载+线程安全)

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