• 设计模式-1-单例模式


    简介:这些类无论实例化多少都是一样的; 这些类在整个应用中同一时刻只有一个状态
    目的:节省内存,减少GC消耗

    总结:整个系统中只有一个实例存在


    标准单例模式:

    public class Persion{
    
      private Persion(){};
      public static Persion getInstance(){
        return PersionSingleton.persion;
      }
    
      private static class PersionSingleton{
        static Persion persion = new Persion();
      }
    }

    标准单例模式优点:
    1,Persion只有一个实例
    2,不会因并发产生多个实例
    3,不会因JVM调优,出现还未正确初始化的实例

    JVM创建对象步骤:
    1,分配内存 //new
    2,初始化构造器 //Persion()
    3,将对象指向已分配的内存地址 //Persion persion =


    反例1:

    public class Singleton{
      
    private static Singleton singleton;   private Singleton(){};
      
    public Singleton getInstance(){     if(singleton == null){ //判断null条件遇到并发问题,会出现多个实例化操作       singleton = new Singleton();     }     return singleton;   } }


    反例2:

    public class Singleton{
    private static Singleton singleton; private Singleton(){};
    public Singleton getInstance(){   if(singleton == null){     synchronized (Singleton.class){       if(singleton == null){         singleton = new Singleton(); //多线程情况下存在,第一个线程实例化释放锁后,第二个线程使用第一个线程实例化的对象会出现错误       } //因为第二个线程可能会使用到还没有完全创建好的实例(JVM内部调优会出现地址已分配但没有初始化的情况)     }   }   return singleton; } }
  • 相关阅读:
    第二周作业修改+
    第三周作业
    第二周作业修改
    第三次作业
    第二次作业
    获奖感想
    最后的作业
    14周作业
    第七周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/6428396.html
Copyright © 2020-2023  润新知