设计模式 —— 单例模式

饿汉式

  • 在类初始化时,已经自行实例化

package singleton;
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton {
    private Singleton(){}
    private static final Singleton instance = new Singleton()   
    //静态工厂方法
    public Singleton geInstance(){
        return instance;
    }
}
  • 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。



懒汉式

  • 在第一次调用的时候实例化自己

package singleton;
//懒汉式单例类.在第一次调用的时候实例化自己   
public class Singleton{ 
    private Singleton(){};
    private static Singleton instance = null;   
    public static Singleton getInstance(){
        if(instance==null){
            return new Singleton();
        }
        return instance;
    }
}
  • 懒汉式单例的实现没有考虑线程安全问题,它是线程不安全的,并发环境下很可能出现多个Singleton实例。
  • 可以通过同步,对getInstance这个方法改造,
  • 保证了懒汉式单例的线程安全

猜你喜欢

转载自blog.csdn.net/weixin_41888813/article/details/81096630