单例模式

单例模式特点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;
	}
}	



你可能感兴趣的:(java,单例模式)