ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

『手撕』单例模式

2020-04-28 22:38:50  阅读:287  来源: 互联网

标签:private uniqueInstance 实例 static 模式 单例 doubleCheck


1.饿汉模式:指全局的单例实例在类装载时构建。

class HungryWay{
    //在静态初始化器中创建单例实例,这段代码保证了线程安全
     private  static   HungryWay  uniqueInstance=new HungryWay();
    //Singleton类只有一个构造方法并且是被private修饰的,所以用户无法通过new方法创建该对象实例
    private HungryWay(){}
    public static  HungryWay getInstance(){
        return uniqueInstance;
    }
}

2.懒汉方式:指全局的单例实例在第一次被使用时构建。
“ 懒汉式” 就是说单例实例在第一次被使用时构建,而不是在JVM在加载这个类时就马上创建此唯一的单例实例。

class LazyWay{
    private  static  LazyWay uniqueInstance;
    private  LazyWay(){}
    //没有加入synchronized关键字的版本是线程不安全的
    public static synchronized LazyWay  getInstance(){
        //判断当前单例是否已经存在,若存在则返回,不存在则再建立单例
        if(uniqueInstance==null){
            uniqueInstance=new LazyWay();
        }
        return  uniqueInstance;
    }
}

3.懒汉式(双重检查加锁版本)

class  DoubleCheck{
        //volatile保证,当doubleCheck变量被初始化成doubleCheck实例时,
        //多个线程可以正确处理doubleCheck变量
      private volatile   static  DoubleCheck doubleCheck;
      private  DoubleCheck(){}
      public static  DoubleCheck   getInstance(){
          if(doubleCheck==null){
              synchronized (DoubleCheck.class){
                  //进入同步代码块后,再检查一次,如果仍是null,才创建实例
                  if(doubleCheck==null){
                      doubleCheck=new DoubleCheck();
                  }
              }
          }
          return doubleCheck;
      }
    }

4.饿汉式(枚举方式)
一般推荐使用这种。

 enum  Singleton {
         //定义一个枚举的元素,它就是 Singleton 的一个实例
         INSTANCE;

         public void get(){
             System.out.println("枚举实现单例模式");
         }
     }

5.懒汉式(登记式/静态内部类方式)
静态内部实现的单例是懒加载的且线程安全。

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

看完觉得可以的小伙伴可以顺手点个赞嘛,谢谢。

标签:private,uniqueInstance,实例,static,模式,单例,doubleCheck
来源: https://blog.csdn.net/SingleNobleTH/article/details/105785983

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有