单例模式——饿汉式与懒汉式

单例模式——饿汉式与懒汉式

单例模式是一种设计模式,即该类实例化后实例对象永远只有一个称为单例。

这里介绍两种实现方式,饿汉式与懒汉式。其中饿汉式是线程安全的,懒汉式线程不安全需要加锁。

两种方式的实现结果分别如下

先看饿汉式

/**
 * 单例设计模式,饿汉式
 */
public class Singleton {
    
    

    private Singleton(){
    
    
    }

    private static Singleton singleton = new Singleton();

    public static Singleton getSingle(){
    
    
        return singleton;
    }
}

再看懒汉式,这里为了线程安全已经加了锁

/**
 *
 * 单例设计模式,懒汉式
 */
public class Singleton2 {
    
    

    private Singleton2(){
    
    

    }

    private static Singleton2 singleton2 = null;

    public static Singleton2 getSingleton2(){
    
    
        if (singleton2==null){
    
    
            synchronized (Singleton2.class){
    
    
                if (singleton2==null){
    
    
                    singleton2=new Singleton2();
                }
            }
        }
        return singleton2;
    }

}

接着调用两个实例,来看看是否是单例。

/**
 * 单例模式
 */
public class SingleMain {
    
    

    public static void main(String[] args) {
    
    
        //饿汉式
        Singleton single1 = Singleton.getSingle();
        Singleton single2 = Singleton.getSingle();
        System.out.println(single1==single2);

        //懒汉式
        Singleton2 singleton1 = Singleton2.getSingleton2();
        Singleton2 singleton2 = Singleton2.getSingleton2();
        System.out.println(singleton1==singleton2);

    }
}

结果是两个true,可见new的两个对象是同一个,实现了单例模式。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/liuliusix/article/details/111273610