单例模式的几种常见写法
Posted duguangming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式的几种常见写法相关的知识,希望对你有一定的参考价值。
第一种:最简单的写法,缺点在于实例在类初始化的时候就创建了,如果在整个项目中都没有使用到该类,就会创建内存空间的浪费。
public class Singleton private Singleton() private static Singleton instance = new Singleton(); public static Singleton getInstance() return instance;
第二种:解决了写法一在类初始化的时候就创建实例的问题,然而只能在单线程中使用,在多线程中使用如果多个线程同时进入if语句中,就可能出现创建多个实例的问题。
public class Singleton private Singleton() private static Singleton instance; public static Singleton getInstance() if(instance == null) instance = new Singleton(); return instance;
第三种:解决了写法二可能出现的问题,可以在多线程中使用。缺点在于synchronized关键字会强制一次只能让一个线程进入方法中,其他线程不得不阻塞等待该线程退出方法。
public class Singleton private Singleton() private static Singleton instance; public synchronized static Singleton getInstance() if(instance == null) instance = new Singleton(); return instance;
第四种:这种写法的好处是充分利用了静态内部类的特点,它的初始化操作跟外部类是分开的。在没有调用 getInstance() 方法之前,静态内部类不会进行初始化,在第一次调用该方法后就生成了唯一一个实例。
public class Singleton private Singleton() private static class SingletonHolder private static Singleton instance = new Singleton(); public static Singleton getInstance() return SingletonHolder.instance;
以上是关于单例模式的几种常见写法的主要内容,如果未能解决你的问题,请参考以下文章