单例模式

来源:互联网 发布:数据分析面试题及答案 编辑:程序博客网 时间:2024/06/16 06:45

单例模式特点1 ,某个类只有一个实例,2,必须自己创建自己的实例,3,向系统提供唯一的实例

饿汉模式:在类被加载的时候就将自己实例化,无须考虑多线程。从系统资源利用来说,因为开始就加载,会使加载时间变长

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

懒汉模式:第一次使用就自己实例化,不用一直占据系统资源,实现延迟加载,但是要处理好多线程访问问题

 private LazySingleton() { }     public static LazySingleton getInstance() {               if (instance == null) {                    synchronized (LazySingleton.class) {                            if (instance == null) {                    instance = new LazySingleton(); //创建单例实例                }            }        }        return instance;     }}
一种更好的单例模式:由于静态单例对象没有作为Singleton的成员变量直接实例化,因此类加载时不会实例化Singleton,第一次调用getInstance()时将加载内部类HolderClass,在该内部类中定义了一个static类型的变量instance,此时会首先初始化这个成员变量,由Java虚拟机来保证其线程安全性,确保该成员变量只能初始化一次。由于getInstance()方法没有任何线程锁定,因此其性能不会造成任何影响。

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



0 0
原创粉丝点击