当前位置:首页 > 开发 > 研发管理 > 正文

单例模式

发表于: 2015-07-08   作者:cuishikuan   来源:转载   浏览:
摘要: 第一种(懒汉,线程不安全): public class Singleton {   2     private static Singleton instance;   3     pri

第一种(懒汉,线程不安全):

public class Singleton {  
 2     private static Singleton instance;  
 3     private Singleton (){}   
 4     public static Singleton getInstance() {  
 5     if (instance == null) {  
 6         instance = new Singleton();  
 7     }  
 8     return instance;  
 9     }  
10 }  

这种写法lazy loading很明显,但是致命的是在多线程下不能正常工作。
第二种(懒汉,线程安全):
1 public class Singleton {  
 2     private static Singleton instance;  
 3     private Singleton (){}
 4     public static synchronized Singleton getInstance() {  
 5     if (instance == null) {  
 6         instance = new Singleton();  
 7     }  
 8     return instance;  
 9     }  
10 }  
这种写法能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。
第三种(饿汉):
1 public class Singleton {  
2     private static Singleton instance = new Singleton();  
3     private Singleton (){}
4     public static Singleton getInstance() {  
5     return instance;  
6     }  
7 }  

第四种(饿汉,变种):

1 public class Singleton {  
 2     private Singleton instance = null;  
 3     static {  
 4     instance = new Singleton();  
 5     }  
 6     private Singleton (){}
 7     public static Singleton getInstance() {  
 8     return this.instance;  
 9     }  
10 }  

第五种(静态内部类):

1 public class Singleton {  
 2     private static class SingletonHolder {  
 3     private static final Singleton INSTANCE = new Singleton();  
 4     }  
 5     private Singleton (){}
 6     public static final Singleton getInstance() {  
 7         return SingletonHolder.INSTANCE;  
 8     }  
 9 }  
第六种(枚举):

1 public enum Singleton {  
2     INSTANCE;  
3     public void whateverMethod() {  
4     }  
5 }  

第七种(双重校验锁):
1 public class Singleton {  
 2     private volatile static Singleton singleton;  
 3     private Singleton (){}   
 4     public static Singleton getSingleton() {  
 5     if (singleton == null) {  
 6         synchronized (Singleton.class) {  
 7         if (singleton == null) {  
 8             singleton = new Singleton();  
 9         }  
10         }  
11     }  
12     return singleton;  
13     }  
14 }  
在JDK1.5之后,双重检查锁定才能够正常达到单例效果。


 

单例模式

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Singleton(单例模式):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 类型:创建类模
单例:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 类图: 单例模式应该是2
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 /** * 单例类 */ public class
首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了, 比如,一台计算机上
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模
7.1 我是皇帝我独苗   自从秦始皇确立了皇帝这个位置以后,同一时期基本上就只有一个人孤零零的坐
单例模型:保证该类只有一个实例,并对外提供读取该实例的接口函数,所有程序共享这一个类实例。不
1.什么是单例模式? Singleton的英文意思是单独,也就是一个人,应用在面向对象语言上,通常翻译成
单例(Singleton)模式 单例(Singleton)模式: 保证一个类在系统里只能有一个对象被实例化。 如:
单例模式 有时候某些对象我们只需要一个,如:线程池、缓存、对话框等等,对于这类对象我们只能有一
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号