概念
Ensure a class has only one instance,and provide a global point of access to it
确保一个类只有一个实例, 而且自信实例化并向整个系统提供这个实例
单例模式可以分为两种
- 饿汉式
- 懒汉式
饿汉式
类加载的时候就进行实例化
package com.fallsown.pattern;
/**
* 单例模式
* @author: 红烧鲈鱼
* @date: 2021/3/16
*/
public class SingletonPattarn {
public static void main(String[] args){
}
}
class Singleton{
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
懒汉式
在类加载不进行实例化, 在第一次使用进行实例化
package com.fallsown.pattern;
/**
* 单例模式
* @author: 红烧鲈鱼
* @date: 2021/3/16
*/
public class SingletonPattarn {
public static void main(String[] args){
}
}
class Singleton{
/**
* 进行实例化会进行
* 1-分配内存
* 2-初始化对象
* 3-指向刚分配的地址,要是发生重排序
* 假设A线程执行了1与3,还没有执行2,B线程来到判断null,B线程就会返回没有初始化的instance
* volatile能防止重排序
*/
private volatile static Singleton singleton;
private Singleton(){}
// 需要加锁,也可以双重检查锁
public static Singleton getInstance(){
if(singleton == null)
synchronized (Singleton.class) {
if (singleton == null)
singleton = new Singleton();
}
return singleton;
}
}