美文网首页
java线程安全单例模式实现

java线程安全单例模式实现

作者: tanbin_tech | 来源:发表于2020-02-23 11:05 被阅读0次

Enum关键字实现

public Enum EnumSingleton {
INSTANCE
}

是最简单的实现

类加载的时候就实例化

public class EarlyInitSingleton{
    private final static EarlyInitSingleton earlyInitSingleton = new EarlyInitSingleton();
    
    public EarlyInitSingleton getInstance() {
        return earlyInitSingleton;
    }
}

在类加载的时候就已经初始化了,简单省事的,唯一就是会造成空间浪费,因为都还没用就已经占位置了,不过,这点内存实际上来说不大。

双重验证

public class DoubleCheckSingleton{
   private static volatile DoubleCheckSingleton instance;
   
   public static DoubleCheckSingleton getInstance() {
       if(instance == null) {
           synchronized(DoubleCheckSingleton.class) {
               if(instance == null) {
                   instance = new DoubleCheckSingleton();
               }
           }
       }
       return instance;
   }
}
缺点:
  • volatile关键字只有在java1.4之后才支持(基本不是什么大问题)
  • 可读性非常差
  • 必须使用volatile是因为保证内存可见性,不然,B线程使用本地的缓存,而A线程已经更新变量,B没看到,就会继续创建一个新实例

使用内部静态类实现懒加载

public class LazyInitInstance {
    private static class B {
        private final static LazyInitInstance INSTANCE = new LazyInitInstance();
    }
    
    public static LazyInitInstance getInstance() {
        return B.instance;
    }
}

第一次调用getInstance方法的时候才会初始化这个内部类

相关文章

  • 单例模式的常用实现方式

    单例模式属于最常用的设计模式,Java中有很多实现单例模式的方式,各有其优缺点 实现方式对比 单例实现方式线程安全...

  • 单例

    单例,是Java中很重要的一个设计模式。 实现单例是要考虑并发(线程安全)问题的。 如何实现一个线程安全的单例?你...

  • kotlin实现单例

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

  • 深入理解 Java 内存模型

    一、概述 在之前 单例模式的Java实现与思考 一文里讲到,为了使用 DCL 实现线程安全的单例模式,需要对实例变...

  • 设计模式

    手写单例模式(线程安全) 你知道几种设计模式?单例模式是什么?Spring中怎么实现单例模式?

  • 实现单例模式的方式2

    方式一: 能保证线程安全 定义类的时候实现单例模式 方式二: 能保证线程安全 对已定义好的类实现单例模式

  • kotlin实现单例模式

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

  • 设计模式——单例模式的破坏

    概述: 之前学习了单例模式的几种实现,解决了多线程情况下,单例的线程安全问题,保证了单例的实现。但是单例模式在下面...

  • Java 单例模式

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

  • Kotlin 的单例模式

    Kotlin 的单例模式 1. 在 Java 中的单例模式 懒汉式单例模式,并且是线程安全 2. 在 Kotlin...

网友评论

      本文标题:java线程安全单例模式实现

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