package com.hzu;
public class Singleton {
//饿汉式 ,在类初始化的时候就加载
//private static volatile Singleton singleton1=new Singleton();
//懒汉式,在使用到该类的实例在加载
//但是存在问题,在多线程的时候可能会破坏单例模式,所有要使用同步
//volatile防止指令重排序,保证可见性
//new 对象:正常步骤 1.分配内存空间,2.对象初始化 3.将对象的地址赋值给引用变量
//懒汉式
private static volatile Singleton singleton;
private Singleton() {
}
public static Singleton getInstance() {
/*
这种写法存在问题,因为每个线程进来的时候,都会被阻塞,影响上锁效率
synchronized (Singleton.class) {
if (singleton == null) {
return new Singleton();
}
}*/
//双检锁,提高了上锁效率
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
return new Singleton();
}
}
}
return singleton;
}
}
单例模式
最新推荐文章于 2024-09-11 11:28:25 发布