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

    未完待续。。。

  • 相关阅读:
    《浪潮之巅》笔记之五
    《浪潮之巅》笔记之四
    《浪潮之巅》笔记之三
    《浪潮之巅》笔记之二
    《浪潮之巅》笔记之一
    basename、dirname、alias、date
    grep命令
    centos6下通用二进制格式安装MySQL过程
    在centos6中编译安装httpd-2.4/搭建LAMP
    在服务器端对sshd做白名单
  • 原文地址:https://www.cnblogs.com/mercuryji/p/singleton.html
Copyright © 2020-2023  润新知