单例

xiaoxiao2021-02-28  84

/** * 懒汉模式,饱汉式 * @author 冒云龙 * @date 2017年4月17日 下午8:28:34 * @describe */ //多线程会出现问题,可以在方法上加synchronized,但会大大影响性能 public class Singleton { private static Singleton uniqueSingleton;//利用一个静态变量来记录Singleton的唯一实例 private Singleton(){//把构造器声明为私有的,只有Singleton类内才能调用构造器 } public static Singleton getInstance(){//可以通过类名调用 if(uniqueSingleton==null){//用getInstance()去实例化对象,并返回这个实例 uniqueSingleton= new Singleton(); }//如果实例不存在就会创建,不需要这个实例就永远不会创建(延迟实例化) return uniqueSingleton; } //这里是其他方法 } /** * 饿汉模式,静态初始化时就创建了,保证了线程安全 * @author 冒云龙 * @date 2017年4月17日 下午8:28:34 * @describe */ public class Singleton { private Singleton(){ } private static Singleton uniqueSingleton = new Singleton(); public static Singleton getInstance(){ return uniqueSingleton; } } /** * 懒汉模式,双重检查枷锁 * @author 冒云龙 * @date 2017年4月17日 下午8:28:34 * @describe */ public class Singleton { private volatile static Singleton unqiueInstance;//voiatile关键字确保,当uniqueInstance被初始化成Singleton实例时,多个线程正确的处理unqiueInstance private Singleton(){ } public static Singleton getInstance(){ if(unqiueInstance==null){//检查实例,如果不存在就进入同步区 synchronized (Singleton.class) {//只有第一次才彻底执行这一块的代码 if(unqiueInstance==null){//再检查一次,如果仍是null,才创建 unqiueInstance = new Singleton(); } } } return unqiueInstance; } }
转载请注明原文地址: https://www.6miu.com/read-43116.html

最新回复(0)