单例模式
Posted zqq_hello_world
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。
单例模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式
- 单例类只能有一个实例
- 单例类必须自己创建自己的唯一实例
- 单例类必须给所有其他对象提供这一实例
-
饿汉模式
类一加载就创建类的实例
public class Singleton { /** * 类加载时创建类的实例,饿汉模式 */ private static final Singleton singleton = new Singleton(); /** * 构成方法私有化 */ private Singleton(){} /** * 对外提供该类的唯一实例 * @return */ public static Singleton getSingleton(){ return singleton; } }
-
懒汉模式
在调用获取单例类方法时,再去创建该实例,线程不安全,需要加线程互斥锁保证线程安全
public class Singleton { /** * 实例对象初始为null */ private static Singleton singleton = null; /** * 构成方法私有化 */ private Singleton(){} /** * 对外提供该类的唯一实例 * 调用实例时判断是否存在该实例,线程不安全 * @return */ public static Singleton getSingleton(){ if(singleton == null){ singleton = new Singleton(); } return singleton; } }
懒汉模式—线程安全
public class Singleton { /** * 实例对象初始为null,volatile保证内存可见性 */ private static volatile Singleton singleton = null; /** * 构成方法私有化 */ private Singleton(){} /** * 对外提供该类的唯一实例 * 判断singleton是否为null,如果为null获取锁去创建 * 双重为null判断,防止在获取锁时,对象已被创建 * @return */ public static Singleton getSingleton(){ if(singleton == null){ synchronized (Singleton.class){ if(singleton == null){ singleton = new Singleton(); } } } return singleton; } }
以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章