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

Java线程安全单例模式实现

作者: 传达室马大爷 | 来源:发表于2016-09-02 09:58 被阅读391次

一般来说,单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。所说都是线程安全的实现。
一般情况下直接使用饿汉式就好了,如果明确要求要懒加载(lazy initialization)会倾向于使用静态内部类,如果涉及到反序列化创建对象时会试着使用枚举的方式来实现单例。

懒汉式
public final class Singleton {

    private static Singleton instance;

    private Singleton() {
        //
    }

    public static Singleton getInstance() {
        synchronized (Singleton.class) {
            if(instance == null) {
                instance = new Singleton();
            }
        }
        return instance;
    }
}
双重检验锁
public final class Singleton {

    //用volatile修饰对象,禁止指令重排序优化
    private volatile static Singleton instance; 

    private Singleton() {
        //
    }

    public static Singleton getInstance() {
        if(instance == null) {
            synchronized (Singleton.class) {
                if(instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
饿汉式
public final class Singleton {

    //类加载时就初始化
    private static final Singleton instance = new Singleton();

    private Singleton() {
        //
    }

    public static Singleton getInstance() {
        return instance;
    }
}
静态内部类
public final class Singleton {

    private Singleton() {
        //
    }

    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
枚举
public enum EnumSingleton {

    INSTANCE;

    private EnumSingleton() {

    }
}

相关文章

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

    单例模式属于最常用的设计模式,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/bwmhettx.html