• 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的效率低下问题。

    未完待续。。。

  • 相关阅读:
    [ios]blocks
    [算法] 堆,栈 【转】
    [ios]关于内存错误调试
    [ios]get,post请求 【转】
    [ios]iOS模拟器应用程序目录结构
    [ios]iPhone地图应用开发以及自定义Annotation [转]
    [算法]插入排序
    [ios]让alertView 自动消失【转】
    [ios]延迟执行方法,取消执行方法
    [算法] 基数排序
  • 原文地址:https://www.cnblogs.com/mercuryji/p/singleton.html
Copyright © 2020-2023  润新知