zoukankan      html  css  js  c++  java
  • 单例模式的三种实现方式

    懒汉、饿汉、双重校验锁

    1、懒汉:需要时才会去创建

    public Class Singleton{

      private static Singleton instance = null;

      private  Singleton(){}

      public static synchronized Singleton getInstance(){

        if( instance == null ){instance = new Singleton(); }

        return instance;

      }

    }

    2、饿汉:线程安全,类加载时就创建了实例

    public Class Singleton{

      private static Singleton instance = new Singleton();

      private  Singleton(){}

      public static Singleton getInstance(){

        return instance;

      }

    }

    //饿汉方式可做变种,将实例放入静态代码块中:

    static{

      instance  = new Singleton();

    }

    3、双重校验锁: volatile 修饰实例变量,同时synchronized同步方法

      在懒汉实现中,如果两个线程同时执行了if判断为null的情况,则会依次执行同步代码块里的代码,为避免创建两个实例,在同步代码块里添加if进行二重校验。

    public Class Singleton{

      private static volatile Singleton instance = null;    //volatile是jdk1.5后才有的

      private  Singleton(){}

      public static  Singleton getInstance(){

        if( instance == null ){

          Synchronized(Singleton.class){

            if(instance == null){

              instance = new Singleton();

            }  

          }

         }

        return instance;

      }

    }

    另:还有静态内部类的实现方式,相当于把饿汉的创建实例方式提到内部类,在外部类getInstance方法内return它的内部类变量(此种方式是线程安全的)

  • 相关阅读:
    数据库性能优化一:数据库自身优化(大数据量)
    Delphi中initialization和finalization
    Delphi中的消息处理
    布施持戒忍辱精进禅定般若——净空法师【转】
    如何清除sql server日志
    工作反省
    软件设计入门2 数据库设计
    软件设计入门1 架构设计
    invokeRequired属性和 invoke()方法
    delphi 生成验证码
  • 原文地址:https://www.cnblogs.com/blackdd/p/12304529.html
Copyright © 2011-2022 走看看