关闭

2.1.1 单例模式

标签: Java程序性能优化
87人阅读 评论(4) 收藏 举报
分类:
一种对象创建模式,确保系统中的一个类只产生一个实例

两大好处:

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;
     }
}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10690次
    • 积分:529
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:1篇
    • 译文:1篇
    • 评论:13条
    文章分类
    最新评论