zoukankan      html  css  js  c++  java
  • java设计模式-单例设计模式详解

    单例设计模式的实现方式:1.立即加载/“饿汉模式”  2.延迟加载/“懒汉模式”  3.使用静态内部类方式实现  4.使用反序列化与序列化方式实现  5.使用enum数据类型实现

    一、立即加载/“饿汉模式”

    public class MySingleton{
      private static MySingleton mySingleton = new MySingleton();
    
      private MySingleton(){
      }
    
      public static MySingleton getnstance(){
      return mySingleton;
      }
    }

    二、延迟加载/“懒汉模式”

    public class MySingleton{
       private static MySingleton mySingleton;
    
       private MySingleton(){
       }
    
       public static MySingleton getInstance(){
         if(mySingleton != null){
         }else{
                 mySingleton = new MySingleton();
            }
         return mySingleton;
       }
     }

    2.1 延迟加载/“懒汉模式”的缺点

      在多线程中,懒汉模式会创建出“多例”。

    2.2懒汉模式的解决方案

      1)方法上声明synchronized关键字 

    public class MySingleton{
       private static MySingleton mySingleton;
    
       private MySingleton(){
       }
    
       synchronized public static  MySingleton getInstance(){
         if(mySingleton != null){
         }else{
                 mySingleton = new MySingleton();
            }
         return mySingleton;
       }
     }

    缺点:整个方法上锁的方法效率太低了

      2)使用同步代码块

    public class MySingleton{
       private static MySingleton mySingleton;
    
       private MySingleton(){
       }
    
       public static  MySingleton getInstance(){
         synchronized (MySingleton.class){
            if(mySingleton != null){
         }else{
                 mySingleton = new MySingleton();
            }
         }   
         return mySingleton;
       }
     }

    缺点:效率依然比较低

    3) 使用DCL双重检查锁机制

    public class MySingleton{
       private static MySingleton mySingleton;
    
       private MySingleton(){
       }
    
       public static  MySingleton getInstance(){
            if(mySingleton != null){
         }else{
                synchronized (MySingleton.class){
                   if(mySingleton == null){
                     mySingleton = new MySingleton();
                   }
                }
            }   
         return mySingleton;
       }
     }

    优点:既解决了懒汉模式的线程安全问题,又提高了synchronized的效率低下问题。

    未完待续。。。

  • 相关阅读:
    面试题总结(vue面试题)
    面试题总结(css面试题)
    设置div居中显示
    关于js中iframe 中 location.href的用法
    js判断是否在iframe中
    npm git 常用命令行 记录
    mongDB数据库 小白学习
    EJS 入门学习
    bower 基础认识
    gulp 粗粗学习 记录下
  • 原文地址:https://www.cnblogs.com/mercuryji/p/singleton.html
Copyright © 2011-2022 走看看