码迷,mamicode.com
首页 > 其他好文 > 详细

常见的几种单例模式

时间:2017-12-18 01:26:22      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:==   strong   单例   必须   div   属性   post   lazy   公有   

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

 

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

 

技术分享图片

常见的几种单例模式

标签:==   strong   单例   必须   div   属性   post   lazy   公有   

原文地址:http://www.cnblogs.com/domi22/p/8053848.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!