zoukankan      html  css  js  c++  java
  • Java设计模式之——单例模式

    一.什么叫单例模式

        JVM所管理的内存也就是堆中只存在某个类的唯一一个实例,通过把构造函数私有化,然供一个静态方法提供唯一实例.单例模式经常被分为饿汉单例模式以及懒汉单例模式.饿汉单例模式是在类初始化的时候创建自己的实例.懒汉模式是在需要实例的时候再创建实例.

    二.单例模式优点与缺点

        优点:内存中只存在一个实例所以减少了内存开销,针对一些创建和销毁对象时开销比较的情况单例模式可以减小系统性能开销.

       缺点:多线程下并发问题.

    三.单例模式在jvm垃圾回收的时候的处理

          在网上看到有人提到了关于单例模式会不会被垃圾回收.我能证明的就是在Hotspot虚拟机中是不会被回收的.Hotspot虚拟机采用的可达性分析算法.单例类Class的referenceon永远指向之前的实例.而方法区中的Class对象不会被垃圾回收.所以单例是一直可达的,因此单例模式在Hotspot虚拟机中不会被回收.

    四.单例模式的代码实现


    1.饿汉式单例模式:

          

     1 /**
     2 
     3      * @author xg.qiu
     4 
     5     * @TODO Java23种设计模式之单例模式
     6 
     7      * @date 2015年5月14日17:15:57
     8 
     9      * @see JDK 1.5
    10 
    11      */
    12 
    13 public class Singleton{
    14 
    15 /*
    16 
    17  * 1.私有无参构造函数
    18 
    19  */
    20 
    21 private Singleton(){}
    22 
    23 /*
    24 
    25  * 2.私有静态的本类实例常量对象
    26 
    27  */
    28 
    29 private final static Singletoninstance = new Singleton(); 
    30 
    31 /*
    32 
    33  * 3.提供一个对外开放的方法(直接返回常量对象:instance)
    34 
    35  */
    36 
    37 public static SingletongetInstance(){
    38 
    39 // 直接返回
    40              return instance;
    41 
    42 }
    43 
    44 }


    2.懒汉式单例模式(多线程下不安全): 

     1   /**
     2 
     3  * @author xg.qiu
     4 
     5  * @TODO Java23种设计模式之单例模式:懒汉式
     6 
     7  * @date 2015年5月14日17:15:57
     8 
     9  * @see JDK 1.5
    10 
    11  */
    12 
    13 public class Singleton {
    14 
    15 /*
    16 
    17  * 1.私有无参构造函数
    18 
    19  */
    20 
    21 private Singleton(){}
    22 
    23 /*
    24 
    25  * 2.私有静态的本类对象 不需要初始化
    26 
    27  */
    28 
    29 private  static Singleton instance = null; 
    30 
    31 /*
    32 
    33  * 3.提供一个对外开放的方法(直接返回常量对象:instance)
    34 
    35  */
    36 
    37 public static Singleton getInstance(){
    38 
    39 if(null == instance){
    40 
    41 // 加上线程锁
    42 
    43 synchronized (Singleton.class){
    44 
    45 if(null == instance)  instance = new Singleton();
    46 
    47 }
    48 
    49 }
    50 
    51 return instance;
    52 
    53 }
    54 
    55 }
  • 相关阅读:
    Newtonsoft.Json(Json.Net)学习笔记
    SQL Server 自动化运维系列
    WCF 动态调用(动态创建实例接口)
    SQL Server 自动化运维系列
    SQL Server 表水平分区
    WCF服务全局异常处理机制
    WCF 透明代理
    WCF扩展记录服务调用时间
    WCF身份验证三:自定义身份验证之<MessageHeader>
    用单链表实现算法2.1
  • 原文地址:https://www.cnblogs.com/XQiu/p/5087936.html
Copyright © 2011-2022 走看看