2.1.1 单例模式

原创 2016年08月28日 19:54:43
一种对象创建模式,确保系统中的一个类只产生一个实例

两大好处:

1.对于频繁使用的对象,可以减少创建的系统开销
2.减轻GC压力,缩短GC停顿时间

参与者:
单例类,提供单例的工厂
使用者,获取并使用单例

第一种:

首先,单例类必须要有一个private访问级别的构造函数,其次instance变量和getInstance()必须是static的

无法对instance延迟加载,由于instance是static,因此JVM加载单例类时就创建

public class Singleton{
     private Singleton(){}
     private static Singleton instance = new Singleton();
     public static Singleton getInstance(){
          return instance;
     }
}

第二种:

在getInstance()中创建instance,需要对getInstance()加同步关键字synchronized
在多线程中时耗远高于第一种,但可以延迟加载

public class Singleton{
     private Singleton(){}
     private static Singleton instance = null;
     public static synchronized Singleton getInstance(){
          if(instance == null)
               instance = new Singleton();
          return instance;
}

第三种:

使用内部类维护单例,既可以延迟加载又不必使用同步关键字
public class Singleton{
     private Singleton(){}
     private static class SingletonHolder{                           //加了static外围类才能访问到instance
          private static Singleton instance = new Singleton();     //这个static是因为只能存在一个instance
     }
     public static Singleton getInstance(){
          return SingletonHolder.instance;
     }
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

单例模式(Singleton)的6种实现

  • 2017年11月02日 11:14
  • 1.17MB
  • 下载

java中的单例模式

  • 2017年05月21日 22:02
  • 5KB
  • 下载

Spark2.1.1<standalone模式下的FileNotFoundException>

2017年05月02日spark发布了稳定版2.1.1,据说是2.0+版本的spark替代了之前的JVM然后自己实现了一套JVM,说是更加节省内存了,于是满心欢喜的下载了 安装完成之后跑了Wordc...
  • Gpwner
  • Gpwner
  • 2017年06月10日 15:47
  • 109

单例模式SingletonMode

  • 2015年08月04日 00:00
  • 10KB
  • 下载

iOS单例模式

  • 2015年08月01日 17:34
  • 62KB
  • 下载

Hive-2.1.1的本地模式和远程模式部署

首先到hive的官网下载hive:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/ 本地化部署Hive,需要mysql的支持,我们先介绍安装mysq...
  • evenljj
  • evenljj
  • 2016年12月21日 15:48
  • 104

Headfirst(五)单例模式C++实现

  • 2015年10月21日 15:24
  • 495KB
  • 下载

Java单例模式深入理解

  • 2015年04月15日 19:43
  • 9KB
  • 下载

【★更新★】高性能 Windows Socket 组件 HP-Socket v2.1.1 正式发布(源代码及测试用例下载)

HP-Socket   以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket。现在把 HP-Socket 的所有代码向大众公开,...
  • DuMiYue
  • DuMiYue
  • 2013年04月22日 11:08
  • 708

单例模式.txt

  • 2015年03月23日 17:02
  • 253B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2.1.1 单例模式
举报原因:
原因补充:

(最多只允许输入30个字)