设计模式 单例模式

xiaoxiao2021-02-28  100

直接介绍几种线程安全的且我觉得还比较不错的方式:

1、饿汉式,就是类加载就初始化了:

public class Singleton { private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } }

2、懒汉式,到你需要时,才会去创建:

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

3、使用Java的枚举,如果对枚举不熟悉,小Google一下:

public enum Singleton { instance; }

4、使用一个持有类,主要是为了不在初始化的时候加载:

public class Singleton { private Singleton(){}; private static final class InstanceHolder{ private static Singleton INSTANCE = new Singleton(); } public static Singleton getInstance(){ return InstanceHolder.INSTANCE; } }

好了,就这么多,以上四种都是比较推荐使用的,除了第一种会类加载的时候初始化,其它三种都不会,且种都保证线程安全,特殊情况(除了多个类加载器,和你非要通过反射等手段生成多个对象)不考虑

转载请注明原文地址: https://www.6miu.com/read-35664.html

最新回复(0)