单例模式(Singleton Pattern)属于属于创建型模式,focus on the instance creation. 涉及一个单一的类来创建对象,和直接new的区别是确保了只有单个对象被创建。
1、饿汉式
public class LazySingleton {
/**
* 构造方法私有,保证了在外部是无法来实例化对象;
*/
private LazySingleton(){
}
/**
* 饿汉式单例实现
*/
private static final LazySingleton single=new LazySingleton();//静态常量对象
/**
* 获取实例
*/
public static LazySingleton getInstance(){
return single;
}
}
public class Test {
public static void main(String[] args) {
LazySingleton singleton1=LazySingleton.getInstance();
LazySingleton singleton2=LazySingleton.getInstance();
System.out.println(singleton1==singleton2);
}
}
运行输出:
true
2、懒汉式
public class EagerSingleton {
/**
* 构造方法私有
*/
private EagerSingleton(){
}
/**
* 懒汉式单例实现 在第一次调用的时候实例化
*/
private static EagerSingleton single;
/**
* 获取实例
*/
public synchronized static EagerSingleton getInstance(){
if(single==null){
System.out.println("第一次调用的实例化");
single=new EagerSingleton();
}
return single;
}
}
测试方法同上
我们可以看到 区别
饿汉式是先定义实例的 而懒汉式是先定义引用,当第一次调用getInstance的时候 进行对象实例化操作;
当然这里我们考虑到多并发的情况 多个线程同时调用这个方法的时候,会出现问题,所以我们加了同步锁 synchronized 来保证同一时刻只有一个线程进入方法;
本文探讨了两种常见的单例模式实现——饿汉式与懒汉式的区别,以及它们在并发环境中的同步策略。通过实例代码展示了如何确保单例对象的唯一性和线程安全性。
2637

被折叠的 条评论
为什么被折叠?



