Java中的懒汉式单例/饿汉式单例/双检索单例

懒汉式单例:线程非安全,当被调用的时候才创建实例,效率较高

public class LazySingleton {
    private static LazySingleton lazySingleton;
    private LazySingleton() {
        
    };
    //获取单例方法
    public static LazySingleton getLazySingleton() {
        if(lazySingleton==null) {
            lazySingleton = new LazySingleton();
            return lazySingleton;
        }else {
            return lazySingleton;
        }
    }
}

饿汉式单例:线程安全,程序加载的时候就创建实例,效率较低

public class HungrySingleton {
    private static final HungrySingleton SINGLE_INSTANCE = new HungrySingleton();
    private HungrySingleton() {
        
    }
    //共有静态方法获取单例
    public static HungrySingleton getInstance() {
        return SINGLE_INSTANCE;
    }
}

使用main方法对单例进行测试,看看是否是同一个实例

public class Main {
    public static void main(String[] args) {
        /**
         * 懒汉式单例调用过程
         */
        LazySingleton lazySingleton1 = LazySingleton.getLazySingleton();
        LazySingleton lazySingleton2 = LazySingleton.getLazySingleton();
        System.out.println(lazySingleton1==lazySingleton2);
        
        /**
         * 饿汉式单例调用过程
         */
        HungrySingleton hungrySingleton1 =HungrySingleton.getInstance();
        HungrySingleton hungrySingleton2 =HungrySingleton.getInstance();
        System.out.println(hungrySingleton1==hungrySingleton2);
    }
}

上面结果在控制台输出true,true。

表示是同一个实例。

第一次写博客,希望大家多多在下面评论,互相交流心得,鞠躬!!!

双检索单例

public class SingleDoubleCheckLock {
    private static volatile SingleDoubleCheckLock instance;

    public static SingleDoubleCheckLock getInstance() {
        if (instance == null) {
            synchronized (SingleDoubleCheckLock.class) {
                if (instance == null) {
                    instance = new SingleDoubleCheckLock();
                }
            }
        }
        return instance;
    }
}

synchronized和volatile的完美配合,便实现了线程安全的双检锁单例模式。

volatile关键字特性
volatile具有可见性、有序性,不具备原子性。
volatile不具备原子性,这是volatile与java中的synchronized、java.util.concurrent.locks.Lock最大的功能差异

volatile不会让线程阻塞,响应速度比synchronized高,这是它的优点。

原文地址:https://www.cnblogs.com/zhanzhuang/p/8630027.html