美文网首页
并发编程之单例模式

并发编程之单例模式

作者: 换煤气哥哥 | 来源:发表于2019-02-26 15:44 被阅读0次

并发编程之单例模式

1.饿汉模式

/**
 * 饿汉。即使没有使用,也会实例化,浪费堆空间
 */
public class SingletonObj01 {

    private static final SingletonObj01 singleton = new SingletonObj01();

    private SingletonObj01() {
    }

    public static SingletonObj01 getInstance() {
        return singleton;
    }
}

2.懒汉模式

/**
 * 懒汉。懒加载,同步方法,线程安全,但是串行化执行,每次都要去竞争锁
 */
public class SingletonObj02 {

    private static SingletonObj02 singleton;

    private SingletonObj02() {
    }

    public synchronized static SingletonObj02 getInstance() {
        if (singleton == null) {
            singleton = new SingletonObj02();
        }
        return singleton;
    }
}
/** 
 * 懒汉。double check,懒加载,线程安全,一旦实例化后就不再争夺锁。
 * 但必须要加关键字volatile,否则会出现NPE,譬如在SingletonObj03构造器中引用了构建很慢的一个大对象
 */
public class SingletonObj03 {

    private volatile static SingletonObj03 singleton;

    private SingletonObj03() {
    }

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

3.内部类常量模式

/**
 * 懒加载,线程安全,效率还高
 */
public class SingletonObj04 {

    private SingletonObj04() {
    }

    private static class InstanceHolder {
        private static final SingletonObj04 singleton = new SingletonObj04();
    }

    public static SingletonObj04 getInstance() {
        return InstanceHolder.singleton;
    }
}

4.枚举模式

/**
 * 《Effective Java》推崇的写法
 */
public class SingletonObj05 {

    private SingletonObj05() {
    }

    private enum Singleton {

        INSTANCE,;

        private final SingletonObj05 singletonObj05;

        Singleton() {
            singletonObj05 = new SingletonObj05();
        }

        private SingletonObj05 getInstance() {
            return singletonObj05;
        }
    }

    public static SingletonObj05 getInstance() {
        return Singleton.INSTANCE.singletonObj05;
    }
}

相关文章

  • 并发编程之单例模式

    并发编程之单例模式 1.饿汉模式 2.懒汉模式 3.内部类常量模式 4.枚举模式

  • 设计模式系列教程之单例模式-原理介绍

    设计模式系列教程之单例模式-原理介绍 一:单例模式(Singleton)学习步骤 经典的单例模式原理: 本文出处:...

  • 单例模式Java篇

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

  • 并行模式与算法

    java高并发程序设计 - 网易云课堂 一、单例模式 高并发情况下的单例模式 public class Stati...

  • Swift的单例模式及如何处理并发访问

    Swift的单例模式 Swift有两种方式实现单例模式 1、全局常量 2、类型常量 处理单例模式的并发访问 1、多...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 单例模式

    单例模式一定要扛得住并发。 单例模式有很多版本,包括双重检查,静态内部类,枚举,其他的写法也有,建议大家看深入浅出...

  • Controller是单例模式的吗?如何保证线程安全?

    Controller是单例模式的吗?如何保证线程安全? 答:Controller是单例的,也就是说并发请求调用Co...

  • 单例

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

网友评论

      本文标题:并发编程之单例模式

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