常见的几种单例模式

Posted 老人与JAVA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见的几种单例模式相关的知识,希望对你有一定的参考价值。

单例模式?:系统运行期间,有且仅有一个实例!

 

1:它必须自行创建这个实例(定义了静态的该类私有对象

2:一个类只有一个实例(只提供私有构造器(核心)

3:它必须自行向整个系统提供这个实例(提供一个静态的公有的方法,返回创建或者获取本身的静态私有对象

这样的单例在高并发的时候存在线程不安全的弊端

 

 

懒汉模式实现单例

1:在类加载时不创建实例,采用延迟加载的方式,在运行时调用创建实例

2:特点是,线程不安全,但是延迟加载lazy loading,减轻开销

解决办法:用synchronized 关键字保证线程安全

 

public class Person {

   //提供私有的静态的该类的属性(懒汉式|饿汉式)

   private static Person person=null;

   //私有的构造

   private Person(){}

   //公共的静态同步方法

   public static synchronized Person getPerson(){

      if(person==null){

         person = new Person();

      }

return person;

}

}

 

 

饿汉模式实现单例

1:在类加载的时候就完成初始化

2:特点:线程安全,速度快。

3:问题:不具备延迟加载的特点。

有的时候实例化单例类(ConfigManager)很消耗资源,我们希望能延迟

加载,如何处理呢?--静态内部类

 

public class Person {

   //提供私有的静态的该类的属性(懒汉式|饿汉式)

   private static final Person person= new Person();

   //私有的构造

   private Person(){}

   //公共的静态同步方法

   public static synchronized Person getPerson(){

          return person;

   }

}

 

Java机制规定,内部类 MyObjectHandle只有在getInstance()方法第一次调用的时候才会被加载(实现了延迟加载效果),而且其加载过程是线程安全的(实现线程安全)。内部类加载的时候实例化一次instance

 

以上是关于常见的几种单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常见的几种单例模式

常见的几种单例模式

常见的几种单例模式写法

几种单例模式实现方式及其优缺点分析

常见的8种单例模式

python中几种单例模式的实现