首页 > 其他 > 详细

5.单例模式

时间:2020-01-17 15:32:05      阅读:60      评论:0      收藏:0      [点我收藏+]

单例模式:保证任何情况下都绝对的只生成一个实例的模式。

①.单例角色

  • Singleton: 有且仅有的一个角色(实例)。

Tips:当存在多个实例时,实例间互相影响,会出现意想不到异常。当且仅当,第一次调用类中静态方法的时候,Singleton类会被初始化,生成唯一的静态实例,重复调用时直接返回已经初始化完成的实例。

②.实现单例

  • 方式一:简化实现的单例模式
public class Singleton {
    private static Singleton singleton=null;
    /*
        私有化,不给外界直接new的机会
     */
    private Singleton() {
    }
    /*
        1.简化实现的单例模式,但遇到多线程肯定有问题
     */
    public static Singleton getInstance(){
        if (singleton==null){
            singleton=new Singleton();
        }
        return singleton;
    }
}
  • 方式二:加锁控制多线程
public class Singleton {
    private static Singleton singleton=null;
    /*
        私有化,不给外界直接new的机会
     */
    private Singleton() {
    }
    /*
        2.通过加锁进行控制多线程临界资源冲突,不推荐,对线程资源消耗大
     */
    public static synchronized Singleton getInstance(){
        if(singleton==null){
            singleton=new Singleton();
        }
        return singleton;
    }
}
  • 方式三:懒汉模式
public class Singleton {
    /*
        私有化,不给外界直接new的机会
     */
    private Singleton() {
    }
    /*
       3.懒汉模式,直接new出来
     */
    privite  static Singleton singleton=new Singleton();
}
  • 方式四:双重加锁机制
public class Singleton {
    privite volatile static Singleton singleton=null;
    /*
        私有化,不给外界直接new的机会
     */
    private Singleton() {
    }
    /*
        4.双重加锁机制
     */
    public static Singleton getInstance(){
        if(singleton==null){
            synchronized(Singleton.class){
                if(singleton==null){
                    singleton=new Singleton();
                }
            }
        }
        return singleton;
    }
}

5.单例模式

原文:https://www.cnblogs.com/stupidhao/p/12205829.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!