单例模式
什么是单例模式?
首先看看定义:保证一个类只有一个实例,并且提供一个全局的访问点
实现方式:
1.懒汉模式
在需要的时候再创建类的实例化。
class LazySingleton{
private static LazySingleton instance = null;
private LazySingleton(){}
public static LazySingleton getIntance(){
//双重锁判断
if(instance == null){
synchronized (LazySingleton.class){
if (intance == null){
intance = new LazySingleton();
}
}
}
return instance;
}
}
缺点:线程不安全。为什么这么说呢,因为就好比美国总统选举,一群人进行选举出来了一个总统;但是这时候有一些人不服气,就又进行了一次选举(川普成功竞选);现在就出现了两个总统,必然出现分歧。所以加入判断
instance == null
当进行选举的时候,其他选举活动是无法执行的。但是对于一个程序而言的话,那么效率是非常低下。所以加入双重锁判定的方式。
2.饿汉模式
在类加载阶段就完成了实例的初始化。通过类加载机制,来保证我们的线程安全。
class HungrySingleton{
private static HungrySingleton instance = new HungrySingleton();
private HungrySingleton(){}
public static HungrySingleton getIntance(){
return instance;
}
}
3.静态内部类
4.反射模式
5.枚举类型
6.序列化
7.jdk源码
spring如何实现单例
在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例)
singleton(单例):只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。
prototype(多例):对这个bean的每次请求都会创建一个新的bean实例,类似于new。
Spring bean 默认是单例模式。