单例模式
单例模式是一种常见的设计模式,而关于单例模式的实现又有以下几种实现方式:饿汉单例,懒汉单例,双重校验锁,静态内部类等实现
饿汉单例
该懒汉单例是线程安全的,但是存在资源浪费的情况,在程序启动时就会创建该类的实例。
java
/**
* @author: dlwlrma
* @data 2025年01月15日 16:34
* @Description 单例模式之懒汉单例
*/
public class Singleton {
//私有静态成员变量,在使用时才会创建实例
private static Singleton instance = new Singleton();
//私有构造方法
private Singleton() {
}
//唯一的公共访问点
public static Singleton getInstance(){
return instance;
}
}
懒汉单例
java
/**
* @author: dlwlrma
* @data 2025年01月15日 16:40
* @Description 懒汉单例
*/
public class Singleton {
//私有静态成员变量,初始化为null
private static Singleton instance = null;
//私有构造器
private Singleton() {
}
//获取唯一可用实例,先判断是否已经创建实例,如果没有创建,则创建实例
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
双重校验锁(DLC)
java
/**
* @author: dlwlrma
* @data 2025年01月15日 16:50
* @Description 双重校验锁
*/
public class Singleton {
private volatile static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
静态内部类
java
/**
* @author: dlwlrma
* @data 2025年01月15日 16:55
* @Description 静态内部类
*/
public class Singleton{
private Singleton(){
}
private static class SingletonHolder{
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}