zoukankan      html  css  js  c++  java
  • 单例模式

    什么是单例模式

      单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

    单例模式的设计思路:

      1.将构造函数私有化,保证类外部不能使用new关键字自行创建对象

      2.在类内部实例化一个对象并通过 静态方法返回

    单例模式的实现方式:

      1.饿汉式单例模式

    class Singleton{
      
        private Singleton(){            
        System.out.println("单例模式");
        }
        private static  Singlleton single=new Singlleton();
        Public static  Singleton  getInstance(){
          return singleton;
      }   
        
    }

    缺点:在一加载的时候就实例化,提前占用系统资源

    优点:线程安全

      2.懒汉式单例模式  synchronized

    class  Singleton{
        private static Singleton  single=null;
        public static synchronized Singleton getInstance(){
        if(singleton==null){    //只在null的时候实例化
            singleton=new Singleton();
        }
        return singleton;
      }
    }    

    优点:解决了饿汉模式一加载就占用资源的问题

    缺点:线程不安全。每次都需要锁住方法,只允许一个线程访问,效率低下

    synchronized:将一个方法或代码块锁住,同一时间只允许一个代码访问

     

      3.双重加锁的懒汉模式

    class Singleton{
        private static Singleton=null;
        public static synchronized   Singleton getInstance(){
        if(singleton==null){
            synchronized(Singleton.class){//锁住那个类的对象
                if(singleton==null){
                    singleton=new Singleton(); 
                }
            }
        }
        return singleton;
      }
    }    

    只有当第一次singleton为null的时候,才进行线程锁

    当后续singleton不为null时,可以允许多个线程同时拿走singleton

      4.静态内部类实现单例

    private static class Singleton1{
        private static Singleton singleton=new Singleton();
    }
    public static Singleton getInstance(){
        return Singleton1.singleton;
    }

    解决了饿汉式提前占用资源的问题,解决了懒汉式线程不安全的问题

  • 相关阅读:
    九章算术卷第二 粟米
    九章算术卷第一 方田
    九章算术卷第一 方田
    九章算术 原序
    软件开发活动
    软件开发活动
    趣味程序之数学之美系列
    I00019 生成全8数
    Sagheer and Nubian Market CodeForces
    Codeforces Round #533 (Div. 2) A. Salem and Sticks(暴力)
  • 原文地址:https://www.cnblogs.com/1960366876tZ/p/8909738.html
Copyright © 2011-2022 走看看