单例模式

单例模式的定义

单例模式确保一个类只有一个实例,并提供一个全局唯一访问点

单例模式的类图

单例模式的实现

饿汉式

  • static 变量在类装载的时候进行初始化
  • 多个实例的 static 变量会共享同一块内存区域
    初始化类的时候就创建
public class Singleton {

//构造私有化,防止直接new
private Singleton(){}

//静态初始化器(static initializer)中创建实例,保证线程安全
private static Singleton instance = new Singleton();

public static Singleton getInstance(){
return instance;
}
}

饿汉式是线程安全的,JVM在加载类时马上创建唯一的实例对象,且只会装载一次。

懒汉式

单例模式的懒汉式实现方式体现了延迟加载的思想(延迟加载也称懒加载Lazy Load,就是一开始不要加载资源或数据,等到要使用的时候才加载)

同步方法

public class Singleton {
private static Singleton singleton;

private Singleton(){}

//解决了线程不安全问题,但是效率太低了,每个线程想获得类的实例的时候,都需要同步方法
public static synchronized Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}

双重检查加锁

public class Singleton {

//volatitle关键词确保,多线程正确处理singleton
private static volatile Singleton singleton;
private Singleton(){}
public static Singleton getInstance(){
if(singleton ==null){
synchronized (Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}

静态内部类

public class Singleton {

private Singleton(){}

private static class SingletonInstance{
private static final Singleton INSTANCE = new Singleton();
}

public static Singleton getInstance(){
return SingletonInstance.INSTANCE;
}
}
posted @ 2021-06-04 17:15  Chanrich  阅读(170)  评论(0编辑  收藏  举报