单例模式(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
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 来保证同一时刻只有一个线程进入方法;



