单例模式概述及代码演示

**

Java单例模式

**
话不多说,show my codes

饿汉式:
对于饿汉式而言,是典型的空间换时间的一种编码形式,在类进行加载的时候,静态实例对象就完成了初始化操作。也就是说不管你用还是不用,先建出来放着,要用的时候就直接拿。相对来说在操作使用的时候,速度比较快的。但是由于在类加载的时候这个对象就产生出来了,所以它的存在周期也是比较长的。正所谓空间换时间的操作形式。

package com.etime.work001;

public class SingletonOne {
    //创建一个私有构造函数
	private SingletonOne() {
	    System.out.println("这是一个私有构造函数");
	}
    //创建私有静态方法并实例化对象
	private static SingletonOne instance = new SingletonOne();
    //创建公有方法返回私有实例对象
	public static SingletonOne getInstance() {
		return instance;
	}
}

懒汉式:
对于饿汉式而言,是典型的时间换空间的一种编码形式,在进行类加载的时候,类内实例对象创建时并不直接初始化,直到第一次调用get方法时,才完成初始化。所以在类加载时并不会真正的去开辟该对象的空间,只有在用的时候,才会去通过检测去判断对象是否实例化,期间就会耗费时间,如果一直不用,空间就不会造成损耗。

package com.etime.work002;

public class SingletonTwo {
    //创建一个私有构造函数
	private SingletonTwo() {
	    System.out.println("这是一个私有构造函数");
	}
    //创建私有静态实例对象
	private static SingletonTwo instance = null;
    //创建公有静态方法并提供实例对象
	public static synchronized SingletonTwo getInstance() {
		if (instance == null) {
			instance = new SingletonTwo();
        }
		return instance;
	}
}

另外,简单了解一下,在实际项目开发中还存在多线程的场景,也就是说在某一时刻干多件事情。
1.相比较而言,饿汉式在类加载的时候,就已经进行了对象实例化创建,即便是多线程并发操作,访问的实例对象也是唯一的,所以饿汉式线程安全。
2.而懒汉式是在第一次要使用的时候才去进行初始化操作,当多个线程并发操作的时候,由于时间片的切换,可能导致一定的线程风险。

猜你喜欢

转载自blog.csdn.net/Turniper/article/details/107721237