多线程(单例设计模式)懒汉式与饿汉式

多线程(单例设计模式)

单例设计模式:保证类在内存中只有一个对象。

如何保证类在内存中只有一个对象呢?
(1)控制类的创建,不让其他类来创建本类的对象。private
(2)在本类中定义一个本类的对象。Singleton s;
(3)提供公共的访问方式。 public static Singleton getInstance(){return s}
单例写法两种:
(1)饿汉式 开发用这种方式

class Singleton {
	//1,私有构造方法,其他类不能访问该构造方法了
	private Singleton(){}
	//2,创建本类对象
	private static Singleton s = new Singleton();
	//3,对外提供公共的访问方法
	public static Singleton getInstance() {				//获取实例
		return s;
	}
}

(2)懒汉式 面试写这种方式。多线程的问题?

class Singleton {
	//1,私有构造方法,其他类不能访问该构造方法了
	private Singleton(){}
	//2,声明一个引用
	private static Singleton s ;
	//3,对外提供公共的访问方法
	public static Singleton getInstance() {				//获取实例
		if(s == null) {
			//线程1等待,线程2等待
			s = new Singleton();
		}

		return s;
	}
}

(3)第三种格式 final

class Singleton {
    //1,私有构造方法,其他类不能访问该构造方法了
    private Singleton(){}
    //2,声明一个引用
    public static final Singleton s = new Singleton();
}

饿汉式和懒汉式的区别

  • 1,饿汉式是空间换时间,懒汉式是时间换空间
  • 2,在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象
发布了55 篇原创文章 · 获赞 5 · 访问量 4159

猜你喜欢

转载自blog.csdn.net/qq_43654669/article/details/102215555