版权声明:fromZjy QQ1045152332 https://blog.csdn.net/qq_36762677/article/details/83280371
设计模式: 代码重复利用,易于扩展
单例模式
保证jvm中只能有一个实例
懒汉式⭐️
线程不安全,需要的时候创建
class Singleton{
//需要时才创建对象
private static Singleton singleton;
//构造方法私有化
private Singleton(){
}
//保证返回一个实例
public static Singleton getInstanse(){
if(singleton == null){
//此处容易发生多线程不安全问题
synchronized (Singleton.class){
if(singleton == null){//再次检验,双重检验锁
singleton = new Singleton();
}
}
}
//如果不是null,无线程安全问题
return singleton;
}
}
饿汉式
天然线程安全,jvm class loder的时候已经就初始化了
- 描述:这种方式比较常用,但容易产生垃圾对象。
- 优点:没有加锁,执行效率会提高。
- 缺点:类加载时就初始化,浪费内存。
它基于 classloder 机制避免了多线程的同步问题,
不过,instance 在类装载时就实例化,虽然导致类装载的原因有很多种,
在单例模式中大多数都是调用 getInstance 方法,
class Singleton{
private static Singleton singleton = new Singleton();
//构造方法私有化
private Singleton(){
}
//保证返回一个实例
public static Singleton getInstanse(){
return singleton;
}
}