单例模式写法

  |   0 评论   |   0 浏览

饿汉式

public class Student1 {

	// 2:成员变量初始化本身对象
	private static Student1 student = new Student1();

	// 构造私有
	private Student1() {}

	// 3:对外提供公共方法获取对象
	public static Student1 getSingletonInstance() {
		return student;
	}

	public void sayHello(String name) {
		System.out.println("hello," + name);
	}
}

懒汉式

静态内部类方式

package shejimoshi.singleton;

/**
 * 静态内部类 单例模式
 */
public class InnerClassSingleton {
    private InnerClassSingleton(){}

    /**
     * JVM在类加载时候是互斥的。
     */
    public static class SingletonFactory {
        private static InnerClassSingleton singleton = new InnerClassSingleton();
    }

    /**
     * 获取实例
     * @return
     */
    public static InnerClassSingleton getSingleInstance() {
        return SingletonFactory.singleton;
    }
}

双重检测锁方式

原理可参考: https://www.cnblogs.com/xz816111/p/8470048.html

package shejimoshi.singleton;

/**
 * 双重检查锁
 */
public class Singleton {
    //volatile 修饰的变量不会进行指令重排序,  volatile能保证可见性和有序性。
    private volatile static Singleton singleton;
    private Singleton(){}

    public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if(singleton == null){
                    singleton  = new Singleton();
                }
            }
        }
        return singleton;
    }


}

标题:单例模式写法
作者:码农路上
地址:http://wujingjian.club/articles/2020/08/04/1596536100421.html