• 设计模式之单例模式(01)


    单例模式分:(1)饿汉式(2)懒汉式 

    单例模式要求:(1)私有的构造方法(2)提供获取实例的静态方法

    (1)饿汉式

     1 public class SingleDemo{
     2   //静态对象,类一旦加载,就实例化;
     3   private static SingleDemo singleDemo = new SingleDemo(); 
     4   //私有化构造方法
     5   private SingleDemo(){};
     6   //提供对外访问的方法
     7   public static SingleDemo getInstance(){
     8     return singleDemo;
     9   }
    10 }
    View Code

    (2)懒汉式(注意存在线程安全问题)

     1 //方式一:不同步(线程安全问题)
     2 public class SingleDemo{
     3   //初始化不创建实例
     4   private static SingleDemo singleDemo; 
     5   //私有化构造方法
     6   private SingleDemo(){};
     7   //提供对外访问的方法
     8   public static SingleDemo getInstance(){
     9     if(singleDemo==null){
    10        singleDemo = new SingleDemo();
    11     }
    12     return singleDemo;
    13   }
    14 }
    15 
    16 //方式二:同步方法
    17 //加同步解决线程安全问题(关键字:synchronized),
    18 //这种同步方式,效率欠佳,因为每次获得对象实例,都要先经过synchronized判断锁,之后再判断是否为空
    19 
    20 21 public class SingleDemo{
    22   //初始化不创建实例;
    23   private static SingleDemo singleDemo; 
    24   //私有化构造方法
    25   private SingleDemo(){};
    26   //提供对外访问的方法
    27   public synchronized static SingleDemo getInstance(){
    28     if(singleDemo == null){
    29        singleDemo = new SingleDemo();
    30     }
    31     return singleDemo;
    32   }
    33 
    34 }
    35 
    36 //方式三:同步代码块
    37 public class SingleDemo{ 
    38       //初始化不创建实例;
    39   private static SingleDemo singleDemo; 
    40   //私有化构造方法
    41   private SingleDemo(){};
    42   //提供对外访问的方法
    43   public synchronized static SingleDemo getInstance(){
    44     //第一次创建的时候,首先判断是否为空,然后在判断锁,然后在走一次是否为空,最后创建,
    45     //但第二次访问的时候,就只判断是否为空了(这时候不为空,所以不判断锁)
    46     if(singleDemo==null){
    47       synchronized(SingleDemo.class){
    48         if(singleDemo == null){
    49            singleDemo = new SingleDemo();
    50         }
    51       }
    52     }
    53     return singleDemo;
    54   }
    55 }
    View Code

    单例模式,是java中比较常见的设计模式之一,以上有不对之处,望批评指正

  • 相关阅读:
    Java并发(五):并发,迭代器和容器
    Java并发(四):并发集合ConcurrentHashMap的源码分析
    Java爬虫初体验
    提升Java代码质量(三)
    Get和Post的初步探究
    01-什么是ElasticSearch
    python-实现动态web服务器
    python-实现二叉树
    python-实现栈结构
    python-实现单链表
  • 原文地址:https://www.cnblogs.com/huaxueyihao/p/6516892.html
Copyright © 2020-2023  润新知